如何为未定义的值过滤对象数组?

How do you filter an array of objects for undefined values?

我有以下数组:

[{object}, {object}, {object}]

每个对象看起来像:

{key0: 3, key1: undefined, key2: 7}

我想过滤数组中未定义的属性,以便数组中的每个对象现在看起来像:

{key0: 3, key2: 7}

我已经用 Lo_Dash 尝试了所有方法,我想我一定要疯了。

您可以遍历所有属性并使用 "delete" 关键字删除未定义的属性。

var myObj = {key0: 3, key1: undefined, key2: 7};

for (var i in myObj) {
  if (myObj[i] === undefined) {
    delete myObj[i];
  }
}

你现在写了什么代码?

你可以这样做:

_.each(array, function(item, index, collection){
  collection[index] = _.filter(item, function(value){
    return value !== undefined;
  });
});

这将遍历数组,然后过滤数组中的每个对象。

编辑:

如果您想将数组元素作为对象来维护,您可以改用 _.reduce。即:

_.each(array, function(item, index, collection){
  collection[index] = _.reduce(item, function(result, value, key){
    if(value !== undefined) { result[key] = value; }
    return result;
  }, {});
});

这是我会采用的方法。在数组上使用 filter 并检查循环中所有未定义的道具。然后只需从您的对象中删除它们。我只是看了看,另一张海报注意到了这一点。我也包含了 hasOwnProperty 检查。

var data = [{
    key0: 3,
    key1: undefined,
    key2: 7
}, {
    key0: 4,
    key1: undefined,
    key2: 8
}, {
    key0: 5,
    key1: undefined,
    key2: 9
}];

function removeUndefined(obj) {
    for (var prop in obj) {
        if (obj.hasOwnProperty(prop) && obj[prop] === undefined) {
            // do stuff
           delete obj[prop];
        }
    }
    return obj;
}

var filtered = data.filter(removeUndefined);

console.log(filtered);

在 LoDash 中,您可以组合使用 map + omit:

objs = _.map(objs, function(x) {
    return _.omit(x, _.isUndefined)
})