gpt4 book ai didi

javascript - 为什么需要复制数组才能对其使用方法?

转载 作者:行者123 更新时间:2023-12-02 23:44:03 24 4
gpt4 key购买 nike

我可以使用Array()来获得一个包含固定数量的未定义条目的数组。例如

Array(2); // [empty × 2] 

但是,如果我去使用 map 方法,比如说,在我的新数组上,条目仍然未定义:

Array(2).map( () => "foo");  // [empty × 2] 

如果我复制数组,那么映射就可以工作:

[...Array(2)].map( () => "foo");  // ["foo", "foo"]

为什么我需要一个副本才能使用该数组?

最佳答案

当您使用Array(arrayLength)创建数组时,您将have :

a new JavaScript array with its length property set to that number (Note: this implies an array of arrayLength empty slots, not slots with actual undefined values).

该数组实际上不包含任何值,甚至不包含未定义值 - 它只是有一个length属性。

当您将具有 length 属性的可迭代对象扩展到数组中时,扩展语法将访问每个索引并在新数组中设置该索引处的值。例如:

const arr1 = [];
arr1.length = 4;
// arr1 does not actually have any index properties:
console.log('1' in arr1);

const arr2 = [...arr1];
console.log(arr2);
console.log('2' in arr2);

并且 .map 仅映射您要映射的数组中实际存在的属性/值。

使用数组构造函数很令人困惑。我建议在从头开始创建数组时使用 Array.from - 您可以向其传递一个具有 length 属性的对象以及映射函数:

const arr = Array.from(
{ length: 2 },
() => 'foo'
);
console.log(arr);

关于javascript - 为什么需要复制数组才能对其使用方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53491943/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com