我想使用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是多维的。谢谢
答案 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
数据。