Mic*_*tra 70 javascript arrays iterable ecmascript-6 babeljs
假设你有一个类似数组的Javascript ES6 Iterable,你事先知道它的长度是有限的,将它转换为Javascript数组的最佳方法是什么?
这样做的原因是许多js库(如下划线和lodash)仅支持Arrays,因此如果您希望在Iterable上使用它们的任何函数,则必须首先将其转换为Array.
在python中,您可以使用list()函数.在ES6中是否有相同的东西?
Xåp*_* - 122
您可以使用Array.from或spread运算符.
例:
let x = new Set([ 1, 2, 3, 4 ]);
let y = Array.from(x);
console.log(y); // = [ 1, 2, 3, 4 ]
let z = [ ...x ];
console.log(z); // = [ 1, 2, 3, 4 ]Run Code Online (Sandbox Code Playgroud)
Col*_*wig 11
您可以使用在ES6中添加的Array.from方法,但仅支持数组和可迭代对象(如地图和集合)(也在ES6中).对于常规对象,您可以使用Underscore 的toArray方法或lodash的toArray方法,因为这两个库实际上都支持对象,而不仅仅是数组.如果你已经使用了下划线或lodash,那么幸运的是他们可以为你处理这个问题,同时为你的对象添加map和reduce等各种功能概念.
Array.from() 函数,它接受输入中的iterable并返回iterable的数组。...与数组文字组合。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); Run Code Online (Sandbox Code Playgroud)
请注意,当我们要复制数组时,通过上述方法只能创建浅表副本。一个例子将解决潜在的问题:
let arr = [1, 2, ['a', 'b']];
let newArr = [ ...arr ];
console.log(newArr);
arr[2][0] = 'change';
console.log(newArr);Run Code Online (Sandbox Code Playgroud)
在这里,由于嵌套的数组,引用被复制,并且没有创建新的数组。因此,如果我们更改旧数组的嵌套数组,则此更改将反映在新数组中(因为它们引用同一数组,因此已复制了引用)。
我们可以通过使用创建深层数组副本来解决浅表副本的问题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)Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
38198 次 |
| 最近记录: |