1

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

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;
4

3 回答 3

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' 对应的值。

于 2013-06-14T13:47:02.623 回答
1

有没有更快的方法来做到这一点?

不是特别的(当然,当前接受的答案并不快)。

您可以通过向后循环稍微加快速度,这样您就不必不断地重新检查数组的长度:

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( not for-in ) 循环:

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

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

于 2018-03-18T14:43:51.160 回答
0

使用了以下方法:

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

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

控制台.log(arr);

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

于 2013-06-14T13:57:26.500 回答