我的函数没有返回预期的输出,而且我不知道为什么。有人可以指出我所缺少的东西吗?

时间:2019-05-08 20:06:22

标签: javascript arrays function

我的函数必须使用2个数组,并且如果其中一个数组比另一个数组短,则需要使用空值来填充空格。

所以我现在想起来可以更轻松地做到这一点,但是我真的很想知道我错过了什么。

我的代码的特定部分是嵌套的forEach循环,当我这样调用函数时,我无法理解

fillSquare([1,2,3],[1,2,3,4,5])

我得到[[1,2,3,4,5],[1,2,3,4,5]]而不是[[1,2,3,null,null][1,2,3,4,5]]

const fillSquare = arr => {
  const maxArrayLength = Math.max(
    ...arr.map(arr => {
      return arr.length;
    })
  );



  let arrayMatrix = new Array(arr.length).fill(
    new Array(maxArrayLength).fill(null)
  );

  arr.forEach((arry, mainIndex) => {
    arry.forEach((item, subIndex) => {
      console.log(mainIndex, "<--main", "sub-->", subIndex, "=", item);
      arrayMatrix[mainIndex][subIndex] = item;
    });
  });
  console.log(arrayMatrix);
  return arrayMatrix;
};

2 个答案:

答案 0 :(得分:1)

调试时,似乎:

let arrayMatrix = new Array(arr.length).fill(
   new Array(maxArrayLength).fill(null)
);

// arrayMatrix[1] == arrayMatrix[0] => true

仅创建1个数组实例。在一个值上设置1值,在两个值上设置它。

此处介绍了解决问题的方法

let arrayMatrix = new Array(arr.length).fill(0).map( _ => new Array(maxArrayLength).fill(null));

这是我的版本-现在不可变

function fillSquare(arr) {
    let clone = [...arr]
    let maxDepth = arr.reduce( (c, subarr) => c = Math.max(c, subarr.length), 0)
    clone.forEach((subarr, index) => {
        let len = clone[index].length;
        clone[index].length = maxDepth;
        clone[index].fill(null, len, maxDepth);
    })
    return clone;
}

导入说明是您可以设置长度和fill间距。如果需要,也请查看reduce

答案 1 :(得分:-2)

pod repo update