对JS数组进行归类(id一样则组成新数组)

  • Post author:
  • Post category:其他


原创地址:https://blog.csdn.net/TKP666/article/details/122306087#comments_23468904

(抄一份,以免原创删除)

碰到了一个需求:要将一个数组里的成员进行归类整理(数组中成员的id一样,则把他们并为一类),于是就写了一个demo示例,如下:

 let arr = [
        {
          key: "a",
          value: 1,
        },
        {
          key: "a",
          value: 2,
        },
         {
          key: "b",
          value: 3,
        },
        {
          key: "b",
          value: 4,
        },
        {
          key: "c",
          value: 5,
        },
      ];
      //先遍历取出搜索的key(因为要根据不同的key生成数组)
      let keys = arr.map((val) => {
        return val.key;
      });
      //数组去重,这样就得到了一共有多少个key
      keys = [...new Set(keys)];
      //声明一个target来装数组
      let target = {};
      //将target对象的每一项设成数组格式
      keys.forEach((val) => {
        target[val] = [];
      });
      //如果key值相等,则push到同一个数组
      arr.map((val) => {
        keys.some((value) => {
          if (val.key == value) {
            target[value].push(val);
            return;
          }
        });
      });
      //target是一个对象,里面是分完类的数组的合集,
      console.log(target);
      //这是对象里的第一个分类的数组
      console.log(target[Object.keys(target)[0]] );
      
//最后组成的target是这样的一个对象数组
      target={
		a:[
		{
          key: "a",
          value: 1,
        },
        {
          key: "a",
          value: 2,
        }
       ],
        b:[
		{
          key: "b",
          value: 3,
        },
        {
          key: "b",
          value: 4,
        }
       ],
       c:[
       {
          key: "c",
          value: 5,
        }
       ]
	}

后来又发现了一种更优化的方法,这样生成的是一个数组合集的数组:

//处理数组的方法
function mapArray(target) {
        let obj = {};
        result = [];
        target.map((item) => {
          let key = item.key;
          //如果有这个key,就push一个对象
          if (obj[key]) {
            obj[key].push(item);
          //如果没有这个key,就把对象设置成数组格式(方便后面push进去)
          } else {
            obj[key] = [item];
          }
        });
        //根据obj中有几个对象,挨个push进去,组成最后的数组
        for (const key in obj) {
          const element = obj[key];
          result.push(element);
        }
        return result;
      }
 console.log(mapArray(arr )); //调用方法,打印的结果如下:

[
	[{
       key: "a",
       value: 1,
      },{
       key: "a",
       value: 2,
      }],
   [{
      key: "b",
      value: 3,
      },{
      key: "b",
      value: 4,
   }],[{
      key: "c",
      value: 5,
     }],
]