【问题标题】:Javascript array, modify values for all keysJavascript数组,修改所有键的值
【发布时间】:2013-06-14 13:44:03
【问题描述】:

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

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;

【问题讨论】:

    标签: javascript arrays performance object


    【解决方案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对应的值。

    【讨论】:

    • 让我们说密钥的名称存储在某个变量(var J)中我将如何实现这个
    • 那么您将在map() 中将x.key1 替换为x[j]
    • 这样使用map毫无意义,而且会误导以后阅读代码的人。
    【解决方案2】:

    有更快的方法吗?

    并不特别(当然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 (not for-in) 循环:

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

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

    【讨论】:

    • +1 用于反向循环以获得任何微小的增益(如果有的话)(对于真正巨大的阵列,它可能会)。顺便说一句,我的答案是 5 岁。现在当我看它时,即使对我来说也没有多大意义。 :)
    • @techfoobar: LOL :-) 我对我的旧答案有这种反应。
    【解决方案3】:

    使用了以下方法:

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

    【讨论】:

      猜你喜欢
      • 2022-01-18
      • 2019-04-09
      • 1970-01-01
      • 2021-05-28
      • 2017-10-23
      • 1970-01-01
      • 2021-11-26
      • 1970-01-01
      • 2019-11-06
      相关资源
      最近更新 更多