Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 神秘的平面映射:无法平面映射使用新数组(1)创建的内部数组_Javascript_Node.js_Typescript - Fatal编程技术网

Javascript 神秘的平面映射:无法平面映射使用新数组(1)创建的内部数组

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(() => &

我检查了两个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(() => "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
将跳过所有空槽。这就是全部。