把对象数组按照某一个属性(或某几个属性)进行分类
2021/4/16 10:55:29
本文主要是介绍把对象数组按照某一个属性(或某几个属性)进行分类,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
方法一:
function sort_pro(data, keys = []) { //keys可以传一个数组 var c = []; var d = {}; for (var element of data) { let element_keyStr = ""; let element_key = []; let element_keyObj = {}; for (var key of keys) { element_key.push(element[key]); element_keyObj[key] = element[key]; } element_keyStr = element_key.join("_"); if (!d[element_keyStr]) { c.push({ ...element_keyObj, children: [element] }); d[element_keyStr] = element; } else { for (var ele of c) { let isTrue = keys.some(key => { return ele[key] != element[key]; }); if (!isTrue) { ele.children.push(element); } } } } return c; }
调用:
var data = [ {name:’张三’,score:56}, {name:’张三’,score:70}, {name:’李四’,score:100} ] console.log(sort_pro(data))
结果:
方法二:
mapData(data) { var beforeData = data; //将dataArr赋值给beforeData 也可直接操作dataArr let tempArr = []; let afterData = [];//新数组 for (let i = 0; i < beforeData.length; i++) { if (tempArr.indexOf(beforeData[i].deptId) === -1) { afterData.push({ deptId: beforeData[i].deptId, invProperty: beforeData[i].invProperty, invType: beforeData[i].invType, items: [{ itemId: beforeData[i].itemId, itemName: beforeData[i].itemName, invSum: beforeData[i].invSum, }], }); tempArr.push(beforeData[i].deptId); } else { for (let j = 0; j < afterData.length; j++) { if (afterData[j].deptId == beforeData[i].deptId) { afterData[j].items.push({ itemId: beforeData[i].itemId, itemName: beforeData[i].itemName, invSum: beforeData[i].invSum, }); break; } } } } return afterData },
调用:mapData(dataArr)
结果:
这篇关于把对象数组按照某一个属性(或某几个属性)进行分类的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)
- 2024-05-30【Java】百万数据excel导出功能如何实现
- 2024-05-30我们小公司,哪像华为一样,用得上IPD(集成产品开发)?
- 2024-05-30java excel上传--poi
- 2024-05-30安装笔记本应用商店的pycharm,再安排pandas等模块,说是没有打包工具?
- 2024-05-29java11新特性
- 2024-05-29哪些无用敏捷指标正在破坏敏捷转型?
- 2024-05-29鸿蒙原生应用再新丁!新华社 入局鸿蒙
- 2024-05-29设计模式 之 迭代器模式(Iterator)