如何为未定义的值过滤对象数组?
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)
})
我有以下数组:
[{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)
})