我的函数必须使用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;
};
答案 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;
}
答案 1 :(得分:-2)
pod repo update