Разделите массив JavaScript на куски с помощью подчеркивания.js
мне нужно разделить массив JavaScript в n размера куски.
например: учитывая этот массив
["a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9", "a10", "a11", "a12", "a13"]
и n равно 4, выход должен быть таким:
[ ["a1", "a2", "a3", "a4"],
["a5", "a6", "a7", "a8"],
["a9", "a10", "a11", "a12"],
["a13"]
]
Я в курсе чистого JavaScript решений для этой проблемы, но так как я уже использую подчеркивания.js мне интересно, если подчеркнуть обеспечивает лучшее решение для этого.
Edit:
Я создал см. Этот тест jsperf тест чтобы проверить, насколько медленнее подчеркнуть решение.
5 ответов:
взгляните на лодашь' chunk: https://lodash.com/docs#chunk
var data = ["a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9", "a10", "a11", "a12", "a13"]; _.chunk(data, 3); // [ // ["a1", "a2", "a3"], // ["a4", "a5", "a6"], // ["a7", "a8", "a9"], // ["a10", "a11", "a12"], // ["a13"] // ]
для решения на основе подчеркивания попробуйте следующее:
var data = ["a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9", "a10", "a11", "a12", "a13"]; var n = 3; var lists = _.groupBy(data, function(element, index){ return Math.floor(index/n); }); lists = _.toArray(lists); //Added this to convert the returned object to an array. console.log(lists);используя метод chain wrapper, вы можете объединить два оператора, как показано ниже:
var data = ["a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9", "a10", "a11", "a12", "a13"]; var n = 3; var lists = _.chain(data).groupBy(function(element, index){ return Math.floor(index/n); }).toArray() .value();
подчеркивания поддерживает _.chunk () изначально начиная с версии 1.9.0.
let data = ["a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9", "a10", "a11", "a12", "a13"]; _.chunk(data, 4); // [ // ["a1", "a2", "a3", "a4"], // ["a5", "a6", "a7", "a8"], // ["a9", "a10", "a11", "a12"], // ["a13"] // ]
попробуйте это гораздо практичнее (например, если вы хотите разделить массив на основе суммы элементов контейнера в каждом суб-массиве):
function chunk(arr, start, amount){ var result = [], i, start = start || 0, amount = amount || 500, len = arr.length; do { //console.log('appending ', start, '-', start + amount, 'of ', len, '.'); result.push(arr.slice(start, start+amount)); start += amount; } while (start< len); return result; };и использование в вашем случае:
var arr = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17], chunked = chunk(arr, 0, Math.floor(arr.length/3)); //to get 4 nested arrays console.log(chunked);и еще один случай:
var arr = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17], chunked = chunk(arr, 0, 3); // to get 6 nested arrays each containing maximum of 3 items console.log(chunked);
Comments