Javascript数组,修改所有键的值

时间:2013-06-14 13:44:04

标签: javascript arrays performance object

我有一个这种格式的数组:

array [ object{key1: v1, key2: v2}, object{key1: v3, key2: v4} ]

现在,要改变每个对象的值,关键是让我们说,key1到v2,我循环遍历每个对象,就像这样

for(var i=0;i<array.length;i++){
   array[i][key1] = v2;
}

有更快的方法吗?例如,是否可以传递数组而不是我喜欢

 i= [0,1];
 array[i][key1] = v2;

3 个答案:

答案 0 :(得分:1)

一种方法是使用map()

var arr = [ {key1: 'v1', key2: 'v2'}, {key1: 'v3', key2: 'v4'} ];
arr = arr.map(function(x) { x.key1 = 'foo'; return x; });

// arr is now: [ {key1: 'foo', key2: 'v2'}, {key1: 'foo', key2: 'v4'} ];

上面的代码将更改与数组中每个对象的键'key1'对应的值。

答案 1 :(得分:1)

  

有更快的方法吗?

不是特别的(当然the currently accepted answer不会更快)。

您可以通过向后循环来加快 轻微 ,这样您就不必经常重新检查数组的长度:

for(var i = array.length - 1; i >= 0; i--){
   array[i][key1] = v2;
}

如果你的意思是更简洁而不是更快,你可以使用forEach

array.forEach(function(entry) { entry[key1] = v2; });

......或使用ES2015 +箭头功能:

array.forEach(entry => { entry[key1] = v2; });

或使用ES2015 +的for-of for-in)循环:

for (const entry of array) {
    entry[key1] = v2;
}

所有这些都可能比原来的表现更差。在99.9999999%的用例中无关紧要。 : - )

答案 2 :(得分:0)

使用以下方法:

var arr = [{'key1':5,'key2':4},{'key1':3,'key2':4}];

arr.map(function(x){x ['key1'] = 20;})

的console.log(ARR);

//输出将是[{'key1':20,'key2':4},{'key1':20,'key2':4}];