Используйте JavaScript или Lodash для создания многомерного массива - PullRequest
0 голосов
/ 21 ноября 2018

Я хочу создать многомерный массив, подобный этому, используя Lodash или vanilla 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) до сих пор, но мне нужно, чтобы этот массив был многомерным.Спасибо

Ответы [ 4 ]

0 голосов
/ 21 ноября 2018

Глядя на документацию 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 данных.

0 голосов
/ 21 ноября 2018

с ванильным 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 секунд.Часы Лодаша закрываются за 0,110 с.Array.from отстает от 0,254.

0 голосов
/ 21 ноября 2018

Использование вложенных нативных 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)
0 голосов
/ 21 ноября 2018

С 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>
...