如何依据重复出现的键'a'拆分数组并生成新子数组
按指定键拆分JavaScript数组的解决方案
问题背景
给定如下JavaScript数组:
const test = [{a:1},{b:2},{c:3},{d:4},{a:5},{b:6},{c:7},{a:8},{c:9}]
需要实现:每当元素包含键'a'时,以此元素为起点拆分出一个新子数组,子数组的范围从该元素开始,直到下一个含'a'的元素之前(或数组末尾)结束。最终期望输出三个子数组:
[{a:1},{b:2},{c:3},{d:4}] [{a:5},{b:6},{c:7}] [{a:8},{c:9}]
解决方案代码
const test = [{a:1},{b:2},{c:3},{d:4},{a:5},{b:6},{c:7},{a:8},{c:9}]; const splitByKeyA = test.reduce((acc, current) => { // 遇到含'a'的元素就新建子数组 if ('a' in current) { acc.push([current]); } else { // 非'a'元素追加到最后一个子数组 acc[acc.length - 1].push(current); } return acc; }, []); // 打印结果验证 splitByKeyA.forEach(subArray => console.log(subArray));
思路说明
- 利用
Array.prototype.reduce遍历原数组,初始化空数组作为存储拆分结果的容器。 - 遍历每个元素时,通过
'a' in current判断当前元素是否包含目标键:- 若是,创建一个包含当前元素的新子数组并加入结果容器。
- 若否,将当前元素添加到结果容器的最后一个子数组中。
- 遍历完成后,结果容器即为按要求拆分后的子数组集合。
内容的提问来源于stack exchange,提问作者Arun Krishna
相关产品推荐
相关产品推荐

