Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 嵌套循环,有更好的方法吗?_Javascript_Performance_For Loop - Fatal编程技术网

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()
。谢谢,我至少可以删除一个循环!这正是我需要的。