开发者问题收集

在 Reactjs 中的对象数组中查找重复属性的数量

2022-08-28
370

我有以下代码,它工作正常`

someVar.getNftsByCollections(['abcs']).then((obj) => {  
obj.filter(nft => nft.sold === true)
    .map(nft => console.log(nft)) 
  });
 
})`

并且它安慰了我这样的数据

          { name: "Common Pass"
          owner: "abc1"
          placeholderNft: false
          position: 1509
          price: 1000}

现在我有 100 个这样的对象,这让我很安慰,但现在我想找到重复的所有者数量,那么我该如何扩展我的代码呢。简单来说,例如有其他具有相同所有者 abc1 的记录,大约有 12 个,所以我该如何实现呢

2个回答
var dublicates = {}
someVar.getNftsByCollections(['abcs']).then((obj) => {  
obj.filter(nft => {
  dublicates[nft.owner] = dublicates[nft.owner] ? dublicates[nft.owner] + 1 : dublicates[nft.owner]
  return(nft.sold === true)
})
    .map(nft => console.log(nft)) 
  });
})

actural_dublicate =Object.keys(dublicates).filter(key => dublicates[key] > 1)

Prosenjit Chongder
2022-08-28

您可以使用 reduce 来迭代此数组并生成格式的计数。

{ owner: 'abc1', count: 12 }

这样您将获得:

someVar.getNftsByCollections(['abcs']).then((obj) => {  
  .filter((nft) => nft.sold)
  .reduce((accObj, nft) => {
      const owner = nft.owner;
      const accountedOwner = accObj.find((obj) => obj.owner === owner);
      if (!accountedOwner) {
        accObj.push({ owner, count: 1 });
      } else {
        accountedOwner.count++;
      }
      return accObj;
    }, []);
})

您可以在以下位置试用:
https://codesandbox.io/s/happy-frog-bx6kxm?file=/src/App.js

Johannes
2022-08-28