首页 > 解决方案 > 来自数组末尾的 lodash 块

问题描述

我有一个数组

const myArray = [1, 2, 2, 2, 3, 3, 3, 4, 4, 4];

我想分成更小的数组。我正在使用 lodash 块来做到这一点。

_.chunk(myArray, 3);

这将返回

[1, 2, 2], [2, 3, 3], [3, 4, 4], [4]

但我希望它回来

[1], [2, 2, 2], [3, 3, 3], [4, 4, 4]

我的解决方案是这样

_.chain(myArray).reverse().chunk(3).reverse().value()

它反转数组,拆分它,然后再次反转它。但是有没有更好的方法来做到这一点?所以块从结尾而不是开头开始。

标签: javascriptlodash

解决方案


找到余数,如果有余数,则从左侧切分,并将其与数组其余部分的块组合。如果没有余数,则正常分块:

const myArray = [1, 21, 22, 23, 31, 32, 33, 41, 42, 43];

const chunkRight = (arr, size) => {
  const rm = arr.length % size;
  
  return rm ?
    [arr.slice(0, rm), ..._.chunk(arr.slice(rm), size)]
    :
    _.chunk(arr, size);
};

const result = chunkRight(myArray, 3);

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>


推荐阅读