javascript - 在 Javascript 中创建多维数组和矩阵

标签 javascript matrix multidimensional-array

尝试创建函数 mCreate()给定一组数字返回一个多维数组(矩阵):

mCreate(2, 2, 2)    
//   [[[0, 0], [0, 0]], [[0, 0], [0, 0]]]

当此函数仅处理 2 个深度级别时,即:mCreate(2, 2) //[[0, 0], [0, 0]]我知道要做 2 个级别,你可以使用 2 个嵌套 for loops但我遇到的问题是如何处理第 n 个参数。

这个问题是否可以通过递归更好地解决,否则我如何动态确定嵌套的数量 for loops我将需要给定参数的数量?

ps:最高效的方式会很棒但不是必需的

重新编辑 - 使用 Benchmark.js 检查 perf 后,结果如下:
BenLesh x 82,043 ops/sec ±2.56% (83 runs sampled)
Phil-P x 205,852 ops/sec ±2.01% (81 runs sampled)
Brian x 252,508 ops/sec ±1.17% (89 runs sampled)
Rick-H x 287,988 ops/sec ±1.25% (82 runs sampled)
Rodney-R x 97,930 ops/sec ±1.67% (81 runs sampled)
Fastest is Rick-H

@briancavalier 也提出了一个很好的解决方案 JSbin :
const mCreate = (...sizes) => (initialValue) => _mCreate(sizes, initialValue, sizes.length-1, 0)

const _mCreate = (sizes, initialValue, len, index) =>
    Array.from({ length: sizes[index] }, () => 
        index === len ? initialValue : _mCreate(sizes, initialValue, len, index+1))
mCreate(2, 2, 2)(0)

最佳答案

一个简单的递归答案是这样的(在 ES2015 中):

const mCreate = (...sizes) => 
    Array.from({ length: sizes[0] }, () => 
        sizes.length === 1 ? 0 : mCreate(...sizes.slice(1)));

JS Bin here

编辑:我想我会用更高阶的函数添加初始化程序:
const mCreate = (...sizes) => (initialValue) => 
    Array.from({ length: sizes[0] }, () => 
        sizes.length === 1 ? initialValue : mCreate(...sizes.slice(1))(initialValue));

可以这样使用:
mCreate(2, 2, 2)('hi'); 
// [[["hi", "hi"], ["hi", "hi"]], [["hi", "hi"], ["hi", "hi"]]]

JSBin of that

关于javascript - 在 Javascript 中创建多维数组和矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36969154/

相关文章:

javascript - 调用变量以引用数组

javascript - CSS进行:active切换

寻找共现矩阵的算法

Matlab:在没有循环的情况下查找 NaN 的相邻实例

python - 如何从特定元素获取矩阵/网格的对角元素?

c - 使用 MPI 对多维数组进行动态内存分配

基于时间的 Javascript 交付显示

javascript - 创建扩展 img 标签的 React 组件

javascript - Vue.js v-if inside v-for 不主动监听数组变化

php - 查找数组中的最大值