Javascript 嵌套循环,有更好的方法吗?
我需要从存储在数组中的对象中删除空属性,而不接触原始数组 这是我的密码:Javascript 嵌套循环,有更好的方法吗?,javascript,performance,for-loop,Javascript,Performance,For Loop,我需要从存储在数组中的对象中删除空属性,而不接触原始数组 这是我的密码: // 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 pa
// 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];
}
}
}
这段代码有效,但我想知道是否有更好的方法来处理此操作
谢谢。要创建阵列的副本,只需执行以下操作:
var newArray = oldArray.slice(0);
除此之外,我真的想不出任何更简单的方法来过滤空值,除了一开始就没有空值。您可能会使用
过滤器
函数来实现这一点,例如:
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;
}
大多数框架都有这样的功能。如果没有,请编写您自己的:)如果您无法更改“shapes”的值,我将尝试以下方法:
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
});
这样,您只需在“形状”中循环一次,而不必迭代“形状”来创建“已解析形状”,然后迭代“已解析形状”来消除空白
if(item[i] || (item[i]===false || item[i]===0)){ obj[i] = item[i]; }
这将删除值“null”或“”中的任何内容。我假设值为“0”或“false”的内容不被视为“空”
注意filter()仅适用于一个数组。因此,如果集合中的项是对象,那么使用filter()将不起作用。使用
.map()
和.forEach()
。谢谢,我至少可以删除一个循环!这正是我需要的。