【问题标题】:Concise way to copy array elements in JavaScript在 JavaScript 中复制数组元素的简洁方法
【发布时间】:2018-01-23 21:23:24
【问题描述】:

我需要将元素从一个 JavaScript 数组复制到另一个。是的,我知道有很多关于克隆数组的问题,但大多数相关答案都会创建现有数组的新副本。 我已经有一个想要保留的数组的副本。我只想用另一个数组的值来更新值。像这样:

//I already have this array
const oldArray = new Array(10);
//here is a new array I get from somewhere
const newArray = new Array(10).fill(3);
//I just want to copy the values, not create a new array
for(let i = 0; i < newArray.length; i++) {
  oldArray[i] = newArray[i];
}

是否有一些很酷、巧妙的方法可以做到这一点,也许使用 ES6 语法?

【问题讨论】:

  • 等等,你的意思是像 Object.assign() 吗?那只是浅拷贝,这里要深拷贝吗?

标签: javascript arrays


【解决方案1】:

您可以使用Array#splice从开头删除oldArray中等于newArray长度的项目数量,然后将newArray中的所有项目添加到其中:

const oldArray = new Array(10).fill(4);

const newArray = new Array(5).fill(3);

oldArray.splice(0, newArray.length, ...newArray);

console.log(oldArray);

【讨论】:

    【解决方案2】:

    您可以使用Object.assign()

    const arr = [1,2,3];
    
    const values = [4,5,6];
    
    Object.assign(arr, ...values.map((prop, index) => ({[index]:prop})));
    
    console.log(arr);

    【讨论】:

    • 注意以防万一:这种用法是可变的
    • @SterlingArcher 不确定您的意思?
    • 您可以使用 Object.assign() 作为一种可变方法,或者非作为最近的斗争巴士,因此,我想我会为任何阅读的人做一个脚注。
    • @SterlingArcher 什么是“斗争巴士”,“变异方法”到底是什么意思?
    • 也就是说,它直接修改了arr,这应该是显而易见的,因为你没有重新分配它,但显然已经引起了sterling archer的问题,¯\_(ツ)_/¯
    【解决方案3】:

    您可以只使用Object.assign,将数组作为目标,将数组作为源。

    数组自己的可枚举键的所有值,都被转移到具有相同索引的目标数组中。

    var oldArray = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
        newArray = [10, 11, 12, 13, 14];
    
    Object.assign(oldArray, newArray);
    
    console.log(oldArray);
    .as-console-wrapper { max-height: 100% !important; top: 0; }

    【讨论】:

      猜你喜欢
      • 2016-09-04
      • 2012-04-01
      • 2015-08-08
      • 2012-09-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多