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

您所在的位置:网站首页 js新建方法 在Javascript中创建多维数组和矩阵

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

2023-03-15 23:21| 来源: 网络整理| 查看: 265

尝试创建一个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)

Ben Lesh.. 7

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

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

JS Bin在这里

编辑:我想我会用更高阶函数添加初始化器:

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

1> Ben Lesh..:

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

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

JS Bin在这里

编辑:我想我会用更高阶函数添加初始化器:

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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3