将 ES6 可迭代转换为阵列
2022-08-30 03:04:55
假设你有一个类似数组的Javascript ES6 Iterable,你事先知道它的长度是有限的,把它转换为Javascript Array的最佳方法是什么?
这样做的原因是许多js库(如下划线和lodash)只支持数组,因此如果您希望在迭代器上使用它们的任何函数,则必须首先将其转换为数组。
在python中,你可以只使用list()函数。ES6中是否有等效项?
假设你有一个类似数组的Javascript ES6 Iterable,你事先知道它的长度是有限的,把它转换为Javascript Array的最佳方法是什么?
这样做的原因是许多js库(如下划线和lodash)只支持数组,因此如果您希望在迭代器上使用它们的任何函数,则必须首先将其转换为数组。
在python中,你可以只使用list()函数。ES6中是否有等效项?
您可以使用 Array.from 或展开语法 (...)。。
例:
const x = new Set([ 1, 2, 3, 4 ]);
const y = Array.from(x);
console.log(y); // = [ 1, 2, 3, 4 ]
const z = [ ...x ];
console.log(z); // = [ 1, 2, 3, 4 ]
Array.from()
函数,它采用输入中的可迭代数组,并返回可迭代的数组。...
const map = new Map([[ 1, 'one' ],[ 2, 'two' ]]);
const newArr1 = [ ...map ]; // create an Array literal and use the spread syntax on it
const newArr2 = Array.from( map ); //
console.log(newArr1, newArr2);
请注意,当我们想要复制数组时,通过上面的这些方法,只会创建一个浅副本。一个示例将阐明潜在问题:
let arr = [1, 2, ['a', 'b']];
let newArr = [ ...arr ];
console.log(newArr);
arr[2][0] = 'change';
console.log(newArr);
此处,由于嵌套数组,因此复制了引用,并且不会创建新数组。因此,如果我们改变旧数组的内部数组,此更改将反映在新数组中(因为它们引用相同的数组,因此复制了引用)。
我们可以通过使用 创建阵列的深层克隆来解决具有浅拷贝的问题。例如:JSON.parse(JSON.stringify(array))
let arr = [1, 2, ['a', 'b']]
let newArr = Array.from(arr);
let deepCloneArr = JSON.parse(JSON.stringify(arr));
arr[2][0] = 'change';
console.log(newArr, deepCloneArr)