我需要从存储在数组中的对象中删除空属性,而不触及原始数组。
这是我的代码:
// first I create a copy of the array
parsedShapes = [];
for (var i in shapes) {
parsedShapes.push(shapes[i]);
}
// then for each objects in the new array, I delete all the empty attributes.
for (var i in parsedShapes) {
var objects = parsedShapes[i];
for (var j in objects) {
if (objects[j] === "") {
delete objects[j];
}
}
}
此代码有效,但我想知道是否有更好的方法来处理此操作。
感谢。
答案 0 :(得分:1)
要创建数组的副本,只需执行以下操作:
var newArray = oldArray.slice(0);
除此之外,我不能想到任何更简单的方法来过滤掉空值,而不是仅仅将它们放在那里。
答案 1 :(得分:1)
如果你不能改变'形状'的值,我会尝试这样的事情:
var parsedShapes = shapes.map(function(item){
var obj = {};
for(var i in item){
if(item[i] || (item[i]===false || item[i]===0)){ obj[i] = item[i]; }
}
return obj
});
这样你只需要通过'形状'做一个循环,而不必遍历'形状'来创建'parsedShapes',然后迭代'parsedShapes'来清除空白。
if(item[i] || (item[i]===false || item[i]===0)){ obj[i] = item[i]; }
这将清除任何值'null'或“”。我假设值为'0'或'false'的东西不被视为“空”。
注意 filter()仅适用于一个数组。因此,如果集合中的项目是对象,那么使用filter()将不起作用。
答案 2 :(得分:0)
您可能使用filter
函数执行此操作,例如:
var filtered = object_filter(parsedShaped, function (key, shape) {
return shape !== "";
});
过滤器类似于:
function object_filter(array) {
var result = {};
object_map(object, function (key, value) {
if (filter_function(key, value)) {
result[key] = value;
}
});
return result;
}
大多数框架都有这样的功能。如果没有,请自己编写:)