在ES6中创建多维数组

时间:2019-04-02 22:50:10

标签: javascript arrays multidimensional-array

在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吗?想知道做这样的事情的最佳方法

2 个答案:

答案 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))