编辑:
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']];
有什么建议吗?
答案 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();
答案 3 :(得分:0)
您提到要将数组复制到newArray
吗?如果要复制数组,而不仅仅是将对它们的引用推送到newArray
中,则需要使用.slice
。
所以:newArray.push(data.slice());
请记住,.slice
会生成浅表副本而不是深表副本,因此任何嵌套对象仍将是引用,但将复制基元(如整数和字符串)。