Существует большой вопрос о том, как split a JavaScript array into chunks. В настоящее время я использую это для некоторых статистических методов, я пишу и answer that I'm using выглядит следующим образом (хотя я выбрал не продлить прототип массива, как они это делали в ответ):Разделение массива на перекрывающиеся куски (движущиеся подгруппы)
var chunk = function(array, chunkSize) {
return [].concat.apply([],
array.map(function(elem,i) {
return i%chunkSize ? [] : [array.slice(i,i+chunkSize)];
})
);
};
Это принимает массив, например [1,2,3,4,5,6]
, и с учетом chunkSize
из 2 возвратов [[1,2],[3,4],[5,6]]
. Мне любопытно, как я могу изменить это, чтобы создать массив «перекрывающихся» кусков (или для тех, кто знаком с такими методами, как скользящее среднее, «движущиеся подгруппы»).
При условии того же массива, что и выше, и chunkSize
из 3, он будет возвращать [[1,2,3],[2,3,4],[3,4,5],[4,5,6]]
. A chunkSize
из 2 вернется [[1,2],[2,3],[3,4],[4,5],[5,6]]
.
Любые мысли о том, как подойти к этому?
Пара вещей: во-первых, вам нужно определить 'var array = this;', чтобы использовать его в цикле for для расширения прототипа. Во-вторых, это очень близко, но не совсем. Учитывая '[1,2,3,4,5,6]', он возвращает '[[1,2], [2,3], [3,4], [4,5]]'. Изменение максимального значения для 'i' из' array.length - chunkSize' до 'array.length - chunkSize/2' исправило эту проблему. Спасибо за это! – mbeasley
вы правы на обеих учетных записях ... Извините, я не потратил очень долгое доказательство, читая мою работу – gbtimmon
на самом деле на второй мысли 'array.length - chunkSize/2' wont work. Я думаю, вам нужно 'array.length - (chunkSize - 1)' – gbtimmon