把对象数组按照某一个属性(或某几个属性)进行分类

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)
结果:
在这里插入图片描述



这篇关于把对象数组按照某一个属性(或某几个属性)进行分类的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程