使用JavaScript或Lodash创建多维数组

时间:2018-11-20 23:49:46

标签: javascript lodash

我想使用Lodash或香草JS创建这样的多维数组:

[
  [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
  [11, 12, 13, 14, 15, 16, 17, 18, 19, 20],
  etc
]

这是一个简单的示例,因为我希望这种模式继续增加到1,000,000,但是对于演示1到20很好。

有什么想法吗?到目前为止,我已经尝试过_.range(20),但我需要此Array是多维的。谢谢

4 个答案:

答案 0 :(得分:5)

使用嵌套的本机Array#from()

const 
   limit = 100,
   fr = Array.from;

const res = fr({ length:limit/10 }, (_,i) => fr({ length:10 }, (_,j) => i*10 + j+1 ));

console.log(res)

答案 1 :(得分:3)

使用lodash,您可以使用chunk

const result = _.chunk(_.range(1, 21), 10);
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>

答案 2 :(得分:3)

使用香草javascript:

x = []
for (i=1; i<=20; i=i+10) {
    y = []
    for (j=0; j<10; j++) {
        y.push(i + j)
    }
    x.push(y)
}
console.log(x)

对于任何有兴趣的人,我都会为这些答案计时,这是最快的。使用1百万个条目,时钟时间为.100秒。 Lodash时钟在.110s处紧追其后。 Array.from落后于.254秒。

答案 3 :(得分:3)

查看 ES6 Array.from文档,您会看到范围生成器功能

const range = (start, stop, step) => Array.from({ length: (stop -
start) / step }, (_, i) => start + (i * step));

因此请记住,您可以通过以下方式生成范围:

range(1, 21, 1)  // account for the 0 with the 21 otherwise you get 1-19

然后缺少的是chunk函数:

const range = (start, stop, step) => Array.from({ length: (stop - start) / step }, (_, i) => start + (i * step));
const chunkBy = (arr, by=2) => arr.reduce((r,c,i) => (i%by==0 ? r.push([c]) : r[r.length-1] = [...r[r.length-1], c], r), [])

console.log(chunkBy(range(1,21,1), 10))

chunkBy使用Array.reduce%运算符来chunk数据。