在javascript中分配多维数组的最干净方法是什么?还是有必要?目前,我正在这样做
let dp = new Array(8).fill(null).map(item =>(new Array(8).fill(null).map(item =>(new Array(8).fill(null)))));
(适用于8x8x8)。
或者我可以只做let dp = new Array(); dp[1][1][1] = 7
吗?想知道做这样的事情的最佳方法
答案 0 :(得分:2)
一种可能性是创建一个makeArr
函数,该函数递归调用自己,您可以向其传递一个嵌套对象,该对象指示所需的长度和值,如下所示:
const makeArr = (length, item) => Array.from(
{ length },
() => typeof item === 'object' ? makeArr(item.length, item.item) : item
);
const arrx3x3 = makeArr(3, { length: 3, item: { length: 3, item: 0 } });
// check that every array is a separate reference:
arrx3x3[0][0][0] = 1;
console.log(arrx3x3);
这将允许相对干净地创建任意数组尺寸。
如果每个嵌套数组的长度都相同,则只需在第一个参数length
上指示makeArr
:
const makeArr = (length, item) => Array.from(
{ length },
() => typeof item === 'object' ? makeArr(length, item.item) : item
);
const arrx3x3 = makeArr(3, { item: { item: 0 } });
// check that every array is a separate reference:
arrx3x3[0][0][0] = 1;
console.log(arrx3x3);
如果要用非数组对象填充嵌套的数组项(例如,0
现在位于嵌套的item : 0
中),则必须更改{{1} }进行更精确的测试。
答案 1 :(得分:1)
我将使用Array.from()
并传递一个大小数组,并为最后一个数组传递一个值(val
)。使用数组解构,然后休息以获取current
数组长度和next
嵌套数组的数组。如果next
数组不为空,请使用再次调用该函数的结果。如果没有,请返回val
。
const generateMulti = ([current, ...next], val) =>
Array.from({ length: current }, () => next.length ?
generateMulti(next, val) : val
)
const result = generateMulti([3, 2, 2], null)
console.log(JSON.stringify(result))