根据对象数组中的属性进行分类

这篇博客介绍了如何根据对象数组的特定属性值进行分类。通过引用并解释一位博主的代码,作者详细阐述了分类的过程,包括提取属性值、检查分组、添加到相应组别以及最终返回分类后的数组。此外,作者还分享了自己的尝试,使用map函数实现类似的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前
在这里插入图片描述

之后
在这里插入图片描述

主要就是根据对象数组中的属性值,对数组进行分类,并且将相同属性值只保留一个。

主要方法是根据 这位博主的代码
由于该博主没有进行注解,我对它进行了注释。

      const groupBy = (array, f) => {
        let groups = {};
        array.forEach(function (o) {
          var group = JSON.stringify(f(o));
          groups[group] = groups[group] || [];
          groups[group].push(o);
        });
        return Object.keys(groups).map(function (group) {
          return groups[group];
        });
      };
      const arrayGroupBy = (list, groupId) => {
        let sorted = groupBy(list, function (item) {
          return [item[groupId]];
        });
        return sorted;
      };
      let newSortList = arrayGroupBy(res.data, 'typeName')//typeName就是进行分类的属性值。
      newSortList.map(item => {
        let tempName = item[0].typeName
        item.map(item => {
          item.typeName = null
        })
        item[0].typeName = tempName
      })

首先是调用函数,这里的‘typeName’就是进行分类的属性值。res.data就是要进行分类的对象数组。

let newSortList = arrayGroupBy(res.data, 'typeName')

进入arrayGroupBy内,goupId就是我们要分类的属性值。然后向groupBy传入了一个函数,
该函数就是提取数组中每个对象中的我们要分类的那个属性值

const arrayGroupBy = (list, groupId) => {
        let sorted = groupBy(list, function (item) {
          return [item[groupId]];
        });
        return sorted;
      };

这里的array还是原数组,f是一个函数,在arrayGroupBy进行传入的。

const groupBy = (array, f) => {
        let groups = {};
        array.forEach(function (o) {
          var group = JSON.stringify(f(o));
          groups[group] = groups[group] || [];
          groups[group].push(o);
        });
        return Object.keys(groups).map(function (group) {
          return groups[group];
        });
      };

这一步就是获取这对象中的typeName 的值。

var group = JSON.stringify(f(o));

第一步是判断 是否已经存在这个分组,若已存在就不变,若不存在就为空数组。
第二步就是往该数组进行一个添加。

groups[group] = groups[group] || [];
groups[group].push(o);

遍历完之后,groups就变成了数组对象,每个属性值就是我们要分类的组。
在这里插入图片描述

Object.keys()用于遍历对象的属性值。搭配map就可以遍历该属性值下的数组。

Object.keys(groups).map(function (group) {
          return groups[group];
        });

在这里插入图片描述
最终返回回来的就是一个数组。每个索引下的typeName都是一样的。

下面的方法就是我手写的,比较菜。

 	newSortList.map(item => {
        let tempName = item[0].typeName
        item.map(item => {
          item.typeName = null
        })
        item[0].typeName = tempName
      })

利用map函数遍历数组下的4个数组,利用tempName保存子数组下的第一个typeName。然后再遍历子数组,让该数组下所有的typeName变成null。
最后在将tempName赋给数组的第一个值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值