0

我需要从存储在数组中的对象中删除空属性,而不触及原始数组。

这是我的代码:

// 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];
    }
  }
}

此代码有效,但我想知道是否有更好的方法来处理此操作。

谢谢。

4

3 回答 3

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
});

这样,您只需通过“shapes”进行一次循环,而不必遍历“shapes”以创建“parsedShapes”,然后遍历“parsedShapes”以清除空白。

if(item[i] || (item[i]===false || item[i]===0)){ obj[i] = item[i]; }

这将清除任何值“null”或“”。我假设值为 '0' 或 'false' 的东西不被认为是“空的”。

注意filter() 仅适用于一个数组。因此,如果集合中的项目是对象,那么使用 filter() 将不起作用。

于 2013-07-26T18:17:19.080 回答
1

要创建数组的副本,只需执行以下操作:

var newArray = oldArray.slice(0);

除此之外,我真的想不出任何更简单的方法来过滤掉空值,除了一开始就没有它们。

于 2013-07-26T17:08:21.223 回答
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;
}

大多数框架都会有这样的功能。如果没有,请自己编写:)

于 2013-07-26T17:11:30.607 回答