遍历嵌套数组并按索引分组对象的实现求助
解决数组转换问题:按键重新分组嵌套数组
我来帮你搞定这个数组转换的问题!看起来你已经搭好了初始的遍历框架,但还缺了按键收集对象的核心逻辑,咱们一步步来实现你要的目标格式:
思路分析
你的原数组是按行分组的(每个子数组对应一组包含a/b/c/d的对象),而目标是按键分组(每个子数组对应同一个键的所有对象)。核心步骤是:
- 先确定所有需要处理的键的顺序(这里是a、b、c、d,从第一个完整的子数组就能提取到)
- 针对每个键,遍历原数组的所有子数组,收集包含该键的对象
- 将每个键对应的对象数组组合成最终结果
完整实现代码
(function() { var arr = [ [{ a:"a" }, { b:"b" }, { c:"c" }, { d:"d" }], [{ a:"a" }, { b:"b" }], [{ a:"a" }, { b:"b" }, { c:"c" }], [{ a:"a" }] ]; // 1. 提取所有目标键(从第一个包含完整键的子数组获取) const targetKeys = arr[0].map(item => Object.keys(item)[0]); // 2. 按键收集对应的对象 const transformedArr = targetKeys.map(key => { return arr.reduce((collectedItems, subArr) => { // 在当前子数组中查找含当前键的对象 const matchedItem = subArr.find(item => Object.keys(item)[0] === key); // 如果找到就加入收集数组 if (matchedItem) { collectedItems.push(matchedItem); } return collectedItems; }, []); }); console.log(transformedArr); // 输出结果: // [ // [{ a:"a" }, { a:"a" }, { a:"a" }, { a:"a" }], // [{ b:"b" }, { b:"b" }, { b:"b" }], // [{ c:"c" }, { c:"c" }], // [{ d:"d" }] // ] })();
代码细节解释
- 提取目标键:因为第一个子数组包含了所有可能的键(a、b、c、d),我们用
Object.keys(item)[0]取出每个单键对象的唯一键,得到顺序为['a','b','c','d']的键数组。 - 按键收集对象:
- 用
map遍历每个目标键,为每个键生成对应的对象数组 - 用
reduce遍历原数组的所有子数组,对每个子数组用find查找是否存在当前键的对象,存在就加入收集数组 - 最终每个键对应的收集数组,就是目标格式里的子数组
- 用
这样就完美实现了你需要的数组转换啦!
内容的提问来源于stack exchange,提问作者neonduplex
相关产品推荐
相关产品推荐

