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表示数组的解决方案:关于函数编码,我还有很多东西要学