javascript - 来自数组末尾的 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()
它反转数组,拆分它,然后再次反转它。但是有没有更好的方法来做到这一点?所以块从结尾而不是开头开始。
解决方案
找到余数,如果有余数,则从左侧切分,并将其与数组其余部分的块组合。如果没有余数,则正常分块:
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>
推荐阅读
- c - 十六进制到C中的双重转换
- sql-server - 如果行数达到 10000,如何从 SQL 中删除前 (1) 行
- css - 如何将引导程序 4 工具提示与元素的左上角对齐?
- bots - 电报机器人无法发送直接消息
- apache-spark - 如何在 Zeppelin 中切换 Spark 版本以使用 Spark 3.x
- excel-formula - 如何从多个条件中获取物料代码的最早日期
- r - 通过 R 中的多利率复利分组
- ssl - 无法连接到 AWS MSK 并为客户端代理通信 kafkajs 启用了 sasl_scram 和 TLS 加密
- c++ - CPP 中的优先顺序
- python - Python包:子包的数据文件