JS 过滤数组里对象的某个属性

本文介绍了一种从复杂对象数组中提取特定属性并形成新数组的方法。通过遍历原始数组,只保留所需属性,实现了数据的有效简化。

需求:一串大数组,里面乱七八糟一堆属性。现在只需要其中两个属性,用这两个属性组成一个对象,重新得到一个新数组。新数组长度跟老数组一样,只不过里面所有对象只剩下了两个属性。

zaipeiAmountInit() {
      zcyApi
        .selectNum(this.url + this.curVersion)
        .then(res => {
          // console.log(res);
          if (res.data.code == 10000) {
            this.zaipeiFlag = true;
            
            var t = res.data.data
            for(var i=0;i<t.length;++i){
              var tempObj={}
              tempObj.name = t[i].name
              tempObj.cultivationQuantity = t[i].cultivationQuantity
              this.zaipeiArr.push(tempObj)
            }
          }
        })
        .catch(err => {
          console.log(err);
        });
},

 

JavaScript中,如果你需要查找数组对象中具有相同特定属性值的对象,可以通过多种方式实现。以下是几种常见的实现方法: ### 方法一:使用 `Set` 来检测重复并收集重复对象 ```javascript function findDuplicates(array, key) { const seen = new Set(); const duplicates = []; for (const item of array) { const value = item[key]; if (seen.has(value)) { duplicates.push(item); } else { seen.add(value); } } return duplicates; } const data = [ { id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }, { id: 3, name: 'Charlie' }, { id: 2, name: 'David' }, { id: 1, name: 'Eve' } ]; const result = findDuplicates(data, 'id'); console.log(result); // 输出: [ { id: 2, name: 'David' }, { id: 1, name: 'Eve' } ] ``` 此方法通过遍历数组并利用 `Set` 来跟踪已经遇到的属性值,如果某个属性值已经存在在 `Set` 中,则将其添加到结果数组中。 ### 方法二:使用 `Map` 来分组并筛选重复项 ```javascript function findDuplicatesWithMap(array, key) { const map = new Map(); for (const item of array) { const value = item[key]; if (!map.has(value)) { map.set(value, []); } map.get(value).push(item); } const duplicates = []; for (const [_, items] of map.entries()) { if (items.length > 1) { duplicates.push(...items); } } return duplicates; } const result2 = findDuplicatesWithMap(data, 'id'); console.log(result2); // 输出: [ { id: 2, name: 'David' }, { id: 1, name: 'Eve' } ] ``` 此方法利用 `Map` 将相同属性值的对象分组,然后筛选出长度大于1的组,从而找到重复项。 ### 方法三:使用 `filter` 和 `some` 方法 ```javascript function findDuplicatesWithFilter(array, key) { const seen = new Set(); return array.filter(item => { const value = item[key]; if (seen.has(value)) { return true; } else { seen.add(value); return false; } }); } const result3 = findDuplicatesWithFilter(data, 'id'); console.log(result3); // 输出: [ { id: 2, name: 'David' }, { id: 1, name: 'Eve' } ] ``` 这种方法结合了 `filter` 和 `Set`,在过滤过程中识别出重复项。 ### 方法四:使用 `reduce` 来分组并提取重复项 ```javascript function findDuplicatesWithReduce(array, key) { const grouped = array.reduce((acc, item) => { const value = item[key]; if (!acc[value]) { acc[value] = []; } acc[value].push(item); return acc; }, {}); const duplicates = Object.values(grouped).filter(group => group.length > 1); return duplicates.flat(); } const result4 = findDuplicatesWithReduce(data, 'id'); console.log(result4); // 输出: [ { id: 2, name: 'David' }, { id: 1, name: 'Eve' } ] ``` 该方法通过 `reduce` 将对象属性值分组,并筛选出长度大于1的组,最后将其扁平化为一个数组。 以上方法都可以有效地帮助你在JavaScript中查找数组对象中具有相同特定属性值的对象。根据具体场景和性能需求,可以选择最适合的一种方法[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值