JS对象数组按某元素去重,并将子节点push进对应对象中

数据格式变化为

之前

var allInfo = [
     {
        id:1,
        name:'第一个',
        childrenId: 11
     },
     {
        id:1,
        name:'第一个',
        childrenId: 12
     },
     {
        id:2,
        name:'第二个',
        childrenId: 21
     }
 ]

之后
在这里插入图片描述
主要使用了ES6新增的findIndex函数
遍历结果对象数组中是否已有某个对象存在对应id元素。返回结果为索引值。
若已存在,将对象push进对应的位置;若不存在,则初始化后push。

allInfo为数据平铺的对象数组 project中存放格式化后的数组。

var allInfo = [
     {
        id:1,
        name:'第一个',
        childrenId: 11
     },
     {
        id:1,
        name:'第一个',
        childrenId: 12
     },
     {
        id:2,
        name:'第二个',
        childrenId: 21
     }
 ]
 var project = [] 
      allInfo.map(function (item, index) {
        var local = project.findIndex(p => p.id === item.id)
        if (local !== -1) {
          project[local].children.push(item)
        } else {
          var length = project.push({ id: item.id, name: item.name })
          project[length - 1].children = []
          project[length - 1].children.push(item)
        }
      })

若只需去重,则将所有包含children的语句删掉即可。
复杂度没有降低,不是好办法,但是更易理解,简洁。
记录为以后使用。

JavaScript,如果要对数组元素对象去重,可以利用对象的某个属性作为去重依据,具体实现步骤如下: 1. 创建一个新数组用于存放去重后的元素对象。 2. 遍历原数组元素对象,将元素对象的某个属性值作为判断依据。 3. 利用indexOf()方法判断新数组是否已存在该属性值,如果不存在,则将元素对象添加到新数组。 4. 返回新的数组,即为去重后的元素对象数组。 下面是一个简单的代码示例: ``` let arr = [{ name: 'Tom', age: 18 }, { name: 'Jerry', age: 20 }, { name: 'Tom', age: 18 }]; function unique(arr, attr) { let newArr = []; let tempArr = []; for(let i=0; i<arr.length; i++) { let item = arr[i]; if(tempArr.indexOf(item[attr]) == -1) { tempArr.push(item[attr]); newArr.push(item); } } return newArr; } let uniqueArr = unique(arr, 'name'); console.log(uniqueArr); ``` 在上面的代码,我们通过unique()函数对原数组arr去重操作。该函数接受两个参数,分别为要去重的数组和去重依据的属性名。我们创建了两个数组newArr和tempArr,分别用于存放去重后的元素对象去重依据。在遍历原数组arr的过程,我们通过判断tempArr是否已经存在该属性值来去重。最后返回去重后的元素对象数组uniqueArr,输出结果为: ``` [ { name: 'Tom', age: 18 }, { name: 'Jerry', age: 20 } ] ``` 可以看到,去重成功,重复的元素对象已被删除。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值