将数组作为单个元素复制到JavaScript中的另一个数组中

时间:2019-01-20 21:11:44

标签: javascript arrays json object

编辑:

var G = require('generatorics');
var newArray = [];
   for (var data of G.permutation(['a', 'b'])) {
      console.log(data);

      //this returns an array in every iteration as below
      //data = ['a', 'b'] //iteration 1
      //data = ['b', 'a'] //iteration 2
      //data = ['b', 'b'] //iteration 3 
      //data = ['a', 'a'] //iteration 4

我想将这些“数据”数组作为单个数组添加到每次迭代顶部声明的newArray中。我在下面使用的传播符号添加了所有元素,但所有元素都作为单独的元素进入。

newArray.push(...data);
    }

我正在寻找类似这样的东西作为最终输出。

newArray = [['a', 'b'], ['c', 'd'], ['e', 'f']];

有什么建议吗?

4 个答案:

答案 0 :(得分:1)

只需除去点差(...),就可以每次推入数组data

newArray.push(data);

演示:

var newArray = [];

var something = [['a', 'b'], ['c', 'd'], ['e', 'f']];

for (var data of something ){
  newArray.push(data);
}

console.log(newArray);

或者,如果您想使其更加紧凑,请完全删除for...of循环,而只需使用map

var newArray = [];

var something = [['a', 'b'], ['c', 'd'], ['e', 'f']];

newArray = something.map(data => data);

console.log(newArray);

或者,由于您要使一个数组与另一个数组相同,因此可以这样分配它们:

var something = [['a', 'b'], ['c', 'd'], ['e', 'f']];

var newArray = something;

console.log(newArray);

答案 1 :(得分:1)

听起来好像您要数组的副本不引用同一数组。您可以混合使用map[...]slice()来添加副本,而不只是将对该项的引用添加到新数组中:

let something = [['a', 'b'], ['c', 'd'], ['e', 'f']]

let newArray = something.map(item => [...item]) // copy of each array

console.log(newArray)

// not the same references
console.log(newArray[0] === something[0])

编辑:

如果something是一个迭代器而不是数组,则仍然可以使用for循环进行几乎相同的事情:

// Some iterator from a library //
let arr = [['a', 'b'], ['c', 'd'], ['e', 'f']]
function* gen() {
    yield*  arr
}
let something = gen()
/////////////////////////////

// Array.from can iterate the iteraor
let newArray = Array.from(something, (data) => [...data])

console.log(newArray)
console.log(newArray[0] === arr[0])

编辑II:

这对我来说很好(基本上与上面相同):

// var G = require('generatorics'); // loading with script
var newArray = Array.from(G.permutation(['a', 'b']), (data) => [...data]);
console.log(newArray)
<script src="https://cdn.jsdelivr.net/npm/generatorics@1.1.0/generatorics.js"></script>

答案 2 :(得分:0)

您可以使用地图进行复制...

let newArray = something.map(data => data);

或切片...

let newArray = something.slice();

a bunch more ways

答案 3 :(得分:0)

您提到要将数组复制到newArray吗?如果要复制数组,而不仅仅是将对它们的引用推送到newArray中,则需要使用.slice

所以:newArray.push(data.slice());

请记住,.slice会生成浅表副本而不是深表副本,因此任何嵌套对象仍将是引用,但将复制基元(如整数和字符串)。