如何复制js数组中的元素?

Jan*_*egg 16 javascript arrays

什么是最简单的方法(使用"原生"javascript)来复制javascript数组中的每个元素?

订单很重要.

例如:

a = [2, 3, 1, 4]
// do something with a
a
// a is now [2, 2, 3, 3, 1, 1, 4, 4]
Run Code Online (Sandbox Code Playgroud)

axe*_*uch 17

我想出了类似于tymeJV的回答

[2, 3, 1, 4].reduce(function (res, current, index, array) {
    return res.concat([current, current]);
}, []);
Run Code Online (Sandbox Code Playgroud)

  • 哈哈:)咖啡是不拿饼干的好理由! (2认同)
  • `[2,3,1,4].reduce((a,i)=>a.concat(i,i),[])` 或 `a.concat(Array(10). fill(i))`,或者映射,如果 i 是一个对象并且您需要克隆 (2认同)

Zey*_*man 10

基本上你可以flatMap在 ES19 中使用

a = [1, 2, 3, 4];
a.flatMap(i => [i,i]); // [1, 1, 2, 2, 3, 3, 4, 4]
Run Code Online (Sandbox Code Playgroud)

您也可以像这样自定义重复次数:

a = [1, 2, 3, 4];
const dublicateItems = (arr, numberOfRepetitions) => 
    arr.flatMap(i => Array.from({ length: numberOfRepetitions }).fill(i));

dublicateItems(a, 3);
Run Code Online (Sandbox Code Playgroud)

  • 为什么这么复杂?`a.flatMap(i => Array(n).fill(i))` (7认同)

mor*_*els 9

基本上:

a = [2, 3, 1, 4];
b=[];

for(var i = 0; i< a.length;++i){
  b.push(a[i]);
  b.push(a[i]);
}

a=b;
Run Code Online (Sandbox Code Playgroud)

  • 这是唯一没有让我成为WTF的答案.这很无聊,但目的很明确. (4认同)
  • 如果有人想知道哪种方法是最好的方法,我做了一个基准测试,**这是最快的**方法进行复制,但如果您想复制超过 6 次,请使用嵌套循环来实现更高效的复制。(在具有 100000 个元素的随机数组上进行测试) (2认同)

Bam*_*ieh 6

我在我的应用程序中遇到了这个问题,所以我创建了这个函数:

function duplicateElements(array, times) {
  return array.reduce((res, current) => {
      return res.concat(Array(times).fill(current));
  }, []);
}
Run Code Online (Sandbox Code Playgroud)

要使用它,只需传递数组以及您希望元素重复的次数:

duplicateElements([2, 3, 1, 4], 2);
// returns: [2, 2, 3, 3, 1, 1, 4, 4]
Run Code Online (Sandbox Code Playgroud)


tym*_*eJV 5

我想你可以这样做:

var duplicated = a.map(function(item) {
    return [item, item];
}).reduce(function(a, b) { return a.concat(b) });

//duplicated: [2, 2, 3, 3, 1, 1, 4, 4]
Run Code Online (Sandbox Code Playgroud)