我的函数必须采用 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;
};
调试的时候,好像:
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;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句