我有以下数组:
[{object}, {object}, {object}]
每个对象看起来像:
{key0: 3, key1: undefined, key2: 7}
我想过滤未定义属性的数组,以便数组中的每个对象现在看起来像:
{key0: 3, key2: 7}
我用Lo_Dash尝试了一切,我想我一定是疯了。
答案 0 :(得分:2)
你现在写了什么代码?
你可以这样做:
_.each(array, function(item, index, collection){
collection[index] = _.filter(item, function(value){
return value !== undefined;
});
});
这将迭代数组,然后过滤数组中的每个对象。
编辑:
如果您想将数组元素维护为对象,则可以使用_.reduce。 IE:
_.each(array, function(item, index, collection){
collection[index] = _.reduce(item, function(result, value, key){
if(value !== undefined) { result[key] = value; }
return result;
}, {});
});
答案 1 :(得分:1)
在LoDash中,您可以使用map
+ omit
:
objs = _.map(objs, function(x) {
return _.omit(x, _.isUndefined)
})
答案 2 :(得分:0)
您可以使用“delete”关键字遍历所有属性并删除未定义的属性。
var myObj = {key0: 3, key1: undefined, key2: 7};
for (var i in myObj) {
if (myObj[i] === undefined) {
delete myObj[i];
}
}
答案 3 :(得分:0)
这是我要采取的方法。在数组上使用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);