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

Javascript 如何过滤对象数组中未定义的值?,javascript,arrays,object,underscore.js,lodash,Javascript,Arrays,Object,Underscore.js,Lodash,我有以下数组: [{object}, {object}, {object}] 每个对象看起来像: {key0: 3, key1: undefined, key2: 7} 我想过滤数组中未定义的属性,以便数组中的每个对象现在看起来像: {key0: 3, key2: 7} 我已经用Lo_Dash尝试了所有东西,我想我一定是疯了。你可以循环浏览所有属性,并使用“delete”关键字删除未定义的属性 var myObj={key0:3,key1:undefined,key2:7}; 用于(my

我有以下数组:

[{object}, {object}, {object}]
每个对象看起来像:

{key0: 3, key1: undefined, key2: 7}
我想过滤数组中未定义的属性,以便数组中的每个对象现在看起来像:

{key0: 3, key2: 7}

我已经用Lo_Dash尝试了所有东西,我想我一定是疯了。

你可以循环浏览所有属性,并使用“delete”关键字删除未定义的属性

var myObj={key0:3,key1:undefined,key2:7};
用于(myObj中的var i){
if(myObj[i]==未定义){
删除myObj[i];
}

}
您现在编写了什么代码

你可以这样做:

_.each(array, function(item, index, collection){
  collection[index] = _.filter(item, function(value){
    return value !== undefined;
  });
});
这将迭代数组,然后过滤数组中的每个对象

编辑:

如果要将数组元素作为对象进行维护,可以改用0.reduce。即:

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

这是我将采取的方法。在阵列上使用
过滤器
,检查循环中所有未定义的道具。然后简单地从对象中删除它们。我只是看了看,另一张海报上写着。我还包括了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中,您可以使用
映射
+
省略
的组合:

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

在循环对象时,通常应该使用
hasOwnProperty
检查,但我想这取决于操作。谢谢各位!我正在尝试你的解决方案。我将很快跟进一个类似于您提供的LoDash的版本,但在使用strict模式时,我似乎无法使用delete关键字。除了关掉它,还有什么办法可以绕过严格的模式限制吗?我试过了。它肯定会删除未定义的值,但它也会将我的对象数组重新格式化为数组数组;我需要将已定义值的键值对保留为键值对。啊,我明白了,请使用
.reduce
而不是
.filter
进行尝试。看到我的编辑。伟大的解决方案!Reduce确实很有帮助,但对于我们这些不了解的人来说,它没有得到充分的利用。最近,我提出了一个用reduce表示数组的解决方案:关于函数编码,我还有很多东西要学