从 json 数组中删除未定义的键

Fáb*_*újo 1 javascript javascript-objects

我有以下 JS 数组。删除所有带有未定义键的行的最佳方法是什么?

json=[{email: "1234569@hhh.pt", first: "Joao", last: "Bastos", gender: "Male", phone: "3.51939e+11"},
      {email: "", first: undefined, last: undefined, gender: undefined, phone: undefined}, 
      (...)];
Run Code Online (Sandbox Code Playgroud)

我试过下面的代码,但没有用。我究竟做错了什么?

cleanEmptyRows(json){

var i=0;
var row_to_remove=[];

json.forEach(function(element) {
    for (var key in element) {
        if(element[key]==null){
        row_to_remove.push(i);
        break;
        }
    }
    i++;
});


row_to_remove.forEach(function(element){
    var index = json.indexOf(element);
    if (index > -1) {
        json.splice(index, 1);
    }
});
Run Code Online (Sandbox Code Playgroud)

Pri*_*oss 5

简单的解决方案JSON.parse(JSON.stringify(x))

var t = [{email: "1234569@hhh.pt", first: "Joao", last: "Bastos", gender: "Male", phone: "3.51939e+11"},
      {email: "", first: undefined, last: undefined, gender: undefined, phone: undefined}];

     
console.log(JSON.parse(JSON.stringify(t)));
Run Code Online (Sandbox Code Playgroud)

如果你想删除整行,你可以按照下面的代码,

var t = [{email: "1234569@hhh.pt", first: "Joao", last: "Bastos", gender: "Male", phone: "3.51939e+11"},
      {email: "", first: undefined, last: undefined, gender: undefined, phone: undefined},
      {email: "1234569@hhh.pt", first: "Joao", last: "Bastos", gender: "Male", phone: undefined}];

var resultArray = t.filter((row) => {
    var ignoreValue = Object.values(row).some(elem => elem === undefined);
    return !ignoreValue ? true : false;
});
console.log(resultArray);
Run Code Online (Sandbox Code Playgroud)