循环更改值与数组重建的对象数组

时间:2015-03-24 09:42:43

标签: javascript arrays performance

我有一个对象数组

x = [{id:null},{id:null},{id:null},{id:null}];

假设数组的值发生了变化

x = [{id:1},{id:3},{id:8},{id:12}];

我想将值恢复为全为null,哪种方法的性能更快

A)再次重建阵列

 x=[];
 for (var i=0; i<5; i++) {
    var obj = {};
    obj.id = null;
    x.push(obj);
 }

B)重置值

for (var i in x) {
    x.id = null;
}

2 个答案:

答案 0 :(得分:0)

除非你有数以千计的元素,否则你永远不会注意到表现的差异。

然而,第二种解决方案比第一种解决方案更清晰。

或者,要说清楚x是一个数组:

for (var i = 0; i < x.length; ++i) {
  x[i].id = null;
}

答案 1 :(得分:0)

您的B只会将属性id添加到数组中,并将其值设置为“null”。最重要的是,您should not在数组上使用for in

最快的方式可能是:

var i = x.length;
while(i--){
    x[i].id = null;
}

但除非您的数组有数千个元素,并且在您确定需要之前可能shouldn't even try to optimize表示性能,否则您不会看到差异。在大多数用例中,代码的可读性将比您可以获得的一些片段重要得多。