【问题标题】:Push to multidimensional array returns filled array推送到多维数组返回填充数组
【发布时间】:2021-08-15 04:18:00
【问题描述】:

我的预期输出是一个数组,其中包含一个带有该算法返回值的数组,以及 4 个其他空数组。但由于某种原因,我得到了 5 个充满数据的数组,我很困惑。如果有帮助,您可以在 repl 上查看我的代码。

const getResults = (Algorithms) => {
  const testCases = [0,1,3,2,10,17,97,51];
  let results = Array(5);
  results.fill([]);

  for(const test of testCases) {
      results[0].push(Algorithms.isPrime(test));
  }

  return(results);
}

getResults(Algorithms);

【问题讨论】:

    标签: javascript arrays multidimensional-array syntax


    【解决方案1】:
    results.fill([]);
    

    正在将 same 数组放入 results 的每个插槽中 - 推到一个推到所有位置。

    基本上你有:

    let x = [];
    results.fill(x);
    // [x, x, x, x, x]
    

    然后你正在修改x

    如果需要,您需要为每个插槽使用不同的数组

    results = Array(5).fill().map(() => []);
    

    它会起作用的。

    【讨论】:

    • 你能解释一下 Array.fill() 的行为吗?我了解您的解决方案,但不是最初的问题。或者有什么我可以读的吗? MDN 文档并没有像我希望的那样帮助我。
    • 假设你有两个数组x = []y = [],在底层,x 持有指向内存中某个位置的指针,y 持有指向内存中某个位置的指针。假设 x 位于 0x01,y 位于 0x02。如果我创建一个新数组z = [x, y],则将其视为z = [0x01, 0x02]。如果我做了z = [x, x],那将是[0x01, 0x01]。当您执行results.fill([]) 时,本质上是在说“创建一个新数组0x01,并将0x01 放入results 的每个插槽中
    【解决方案2】:

    Array.from 是您正在寻找的东西。替换那些车道:

    let results = Array(5)
    results.fill([])
    

    与:

    const res = Array.from({length: 5}, _ => [])
    
    console.log(res)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-20
      • 1970-01-01
      相关资源
      最近更新 更多