javascript - 如何按标题对嵌套数组的元素进行分组?
问题描述
我已经问过一个问题——如何对嵌套数组的元素进行分组?,并得到了令人愉快的答复。这个问题会有点像,但不完全一样。
有一个数组:
var ind = ["Apple", "Pear", "Banana"];
还有另一个数组:
var arr = [
[ "Pear", 12, 34, 54, 76, 23, 232 ],
[ "Apple", 54, 22, 11, 23, 21, 33 ],
[ "Banana", 54, 65, 11, 43, 66, 75 ],
[ "Pear", 23, 11, 46, 76, 33, 98 ],
[ "Apple", 12, 34, 54, 76, 23, 232 ],
[ "Banana", 54, 22, 11, 23, 21, 33 ],
];
当子数组进入数组 ind 时,如何按顺序组合子数组的所有值,使其如下所示:
var arr = [
["Apple", [54,12], [22,34], [11,54], [23,76], [21,23], [33,232]],
["Pear", [12,23], [34,11], [54,46], [76,76], [23,33], [232,38]],
["Banana", [54,54], [65,22], [11,11], [43,23], [66,21], [75,33 ]]
];
解决方案
根据数组过滤arr
使用。然后使用在对象查找中生成所需的输出,然后使用.array#filter
ind
array#reduce
Object.values()
const arr = [ [ "Pear", 12, 34, 54, 76, 23, 232 ], [ "Apple", 54, 22, 11, 23, 21, 33 ], [ "Banana", 54, 65, 11, 43, 66, 75 ], [ "Pear", 23, 11, 46, 76, 33, 98 ], [ "Apple", 12, 34, 54, 76, 23, 232 ], [ "Banana", 54, 22, 11, 23, 21, 33 ] ],
ind = ["Apple", "Pear", "Banana"],
matched = arr.filter(a => ind.includes(a[0])),
result = Object.values(matched.reduce((r,[fruit, ...rest]) => {
r[fruit] = r[fruit] || [fruit,[],[],[],[],[],[]];
rest.forEach((v,i) => r[fruit][i+1].push(v));
return r;
},[]));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
推荐阅读
- javascript - 如何在 javascript 代码中使用 <% link %> 标记。我正在使用凤凰框架
- java - Java WAS 线程挂起
- google-cloud-platform - 使用服务帐户的 GCP Cloud KMS 授权失败
- python - 如何从 Python 中具有多个属性的 json 文件映射多面体
- reactjs - Redux 是否能够将任何状态和动作调度连接到任何组件?
- artifactory - 将gitlab配置为artifactory中的远程存储库
- asp.net-core - 如何在 ASP.NET Core 3.1 中使用简单注入器进行依赖交换以进行集成测试
- javascript - ASP.Net MVC 查看页面顺序下拉列表不起作用
- python - 模糊匹配列和合并/连接数据框
- python - 如何向客户端发送 ssl 证书链