我有一个这种格式的数组:
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;
答案 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}];