Javascript 神秘的平面映射:无法平面映射使用新数组(1)创建的内部数组
我检查了两个flatMap/map的MDN,但仍然无法理解第三个测试失败的原因:Javascript 神秘的平面映射:无法平面映射使用新数组(1)创建的内部数组,javascript,node.js,typescript,Javascript,Node.js,Typescript,我检查了两个flatMap/map的MDN,但仍然无法理解第三个测试失败的原因: describe("mysterious flatMap", () => { it("an array will be mapped to an array of `undefined` when its element NOT set", () => { const mapped = new Array(1).map(() => &
describe("mysterious flatMap", () => {
it("an array will be mapped to an array of `undefined` when its element NOT set", () => {
const mapped = new Array(1).map(() => "x");
expect(mapped.length).toBe(1); //OK
expect(mapped[0]).toBe(undefined); // OK
});
it("flatMap can join array of `undefined`", () => {
const flat = [undefined].flatMap((_) => [undefined]);
expect(flat.length).toBe(1); // OK
expect(flat[0]).toBe(undefined); //OK
});
it("but flatMap can NOT join the array which is created without elements set, why ??", () => {
const flat = [undefined].flatMap((_) => new Array(1).map(() => "x"));
expect(flat.length).toBe(1); // Error, Received: 0
expect(flat[0]).toBe("x");
});
});
我还从
flatMap
与map()
后接深度为1的flat()
相同,但比单独调用这两个方法效率略高
及
展开方法删除阵列中的空槽(孔)
此代码
new Array(1).map(() => "x")
不返回[未定义]
。它创建一个稀疏阵列(孔阵列)
()
因此,您的最后一块代码相当于
[empty x1].flat(1)
,这将生成一个空数组。非常有意义。将一个包含一个元素的数组映射到一个空数组会导致…一个空数组。不知道为什么会出现这种情况。flat
和flatMap
移除孔。“”当一个数组的元素未设置时,该数组将被映射到一个未定义的数组“”实际情况并非如此。您有一个空插槽阵列。它不是一个未定义的数组。顺便说一句,这也是稀疏数组的特点——充满了漏洞!更准确地说,新数组(1).map(()=>“x”)
相当于只拥有新数组(1)
,因为.map
将跳过所有空槽。这就是全部。