在数组中查找重复的对象,并以重复的数目作为新属性返回对象的新数组

你在吃

所以我有一个像这样的对象数组:

let arrayOfObjects = [
  {
    Name: "Apple",
    Type: "Fruit"
  },
  {
    Name: "Carrot",
    Type: "Vegetable"
  },
  {
    Name: "Carrot",
    Type: "Vegetable"
  },
  {
    Name: "Carrot",
    Type: "Vegetable"
  },
  {
    Name: "Apple",
    Type: "Fruit"
  },
  {
    Name: "Apple",
    Type: "Fruit"
  },
  {
    Name: "Carrot",
    Type: "Vegetable"
  }
];

我需要遍历它,查找重复项,并为每个重复项仅返回一个对象,但是将重复项的数量作为新参数。

像这样:

let newArrayOfObjects = [
  {
    Name: "Apple",
    Type: "Fruit",
    times: 3,
  },
  {
    Name: "Carrot",
    Type: "Vegetable",
    times: 4,
  }
];

我可以根据一个参数计算重复的对象,但我不知道如何基于整个对象。解决此问题的最佳方法是什么?

负摩擦

我认为您最适​​合创建一个辅助对象。辅助对象最初将是空的,但将根据您正在阅读的内容慢慢填充。我将假设数组中的键是一致的。

const keys = ["Name","Type"]
var counterObj = {}
let keyForCounterObj
arrayOfObjects.forEach((obj)=>{
    keyForCounterObj = ''
    keys.forEach((key)=>{
        keyForCounterObj += String(obj[key])
}
if(counterObj[keyForCounterObj]){
    counterObj[keyForCounterObj].times ++
}else{
    counterObj[keyForCounterObj] = {
        ...obj,
        times:1
}}}

让我们来分解一下,因为我知道如果您以前从未看过此设置,可能会有些困惑。

我们遍历数组中的每个对象,并根据该对象存储的所有值构造一个键。例如,arrayOfObjects [0]将创建一个键“ AppleFruit”。(我使用String()方法只是为了将其应用于仅具有整数或浮点值的对象,因为这些值对于在javaScript中创建键是无效的。对于您的特定问题而言,这不是必需的)

有了该密钥后,我们将检查它是否存在于我们的counterObject中。如果它不存在,那么我们定义它。我们将“ times”属性设置为1,因为我们刚刚创建了此对象;除非我们刚刚找到它,否则它将不存在。

如果对象已经存在,那么我们只需增加“ times”属性即可。最后,我们有一个看起来像这样的对象:

counterObj = {
    AppleFruit: {
        Name:"Apple",
        Type:"Fruit",
        times:3,
    },
    CarrotVegetable:{
        Name:"Carrot",
        Type:"Vegetable",
        times:4,
    }
}

好的,现在我们有了对象的对象。让我们把它变成一个数组!

let newArrayOfObjects = []
const counterObjKeys = Object.keys(counterObj)
counterObjKeys.forEach((key)=>{
    newArrayOfObjects.push(counterObj[key])
}

这将以您指定的格式返回最终值!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在数组中查找重复的对象

来自分类Dev

将具有重复属性的对象返回到新数组

来自分类Dev

Swift:在数组中查找重复的CNContact对象

来自分类Dev

在数组中查找最大数目并返回对象名称

来自分类Dev

Ruby根据属性在数组中查找和返回对象

来自分类Dev

在数组中查找重复的数字,然后计算重复的数目

来自分类Dev

将对象不变地添加到作为对象属性的数组并返回新对象的简便方法

来自分类Dev

基于不重复的现有对象创建新的对象数组

来自分类Dev

在数组中查找重复的对象值并将其合并-JAVASCRIPT

来自分类Dev

检查包含对象作为数组的数组中的重复项

来自分类Dev

根据对象数组中的value属性查找重复对象,然后减少将重复对象与其label属性连接起来的数组

来自分类Dev

在数组中查找重复项

来自分类Dev

在数组中查找重复项

来自分类Dev

在数组Ruby中查找重复项

来自分类Dev

在数组中查找重复项

来自分类Dev

在数组中查找重复的整数

来自分类Dev

在数组中查找重复项

来自分类Dev

在数组中查找重复的字母 (javascript)

来自分类Dev

从数组中删除重复对象

来自分类Dev

在数组中查找重复和唯一值,然后在对象中将字符串转换为数组

来自分类Dev

在数组中查找具有特定属性的项目,然后计算数量,然后使用具有各自结果的对象创建新数组

来自分类Dev

Javascript-在对象数组中查找(不删除)具有重复属性的元素

来自分类Dev

按属性在对象数组中查找重复项的最短方法

来自分类Dev

从对象数组中删除重复项,并在JavaScript中添加新值(例如,数量)

来自分类Dev

在数组中查找元素并返回父对象

来自分类Dev

在多维数组中查找重复值并创建不包含重复项的新多维数组

来自分类Dev

如何从嵌套在数组对象内部的数组中删除重复的对象值?

来自分类Dev

在数组中查找具有属性的对象

来自分类Dev

在对象数组中查找重复元素

Related 相关文章

  1. 1

    在数组中查找重复的对象

  2. 2

    将具有重复属性的对象返回到新数组

  3. 3

    Swift:在数组中查找重复的CNContact对象

  4. 4

    在数组中查找最大数目并返回对象名称

  5. 5

    Ruby根据属性在数组中查找和返回对象

  6. 6

    在数组中查找重复的数字,然后计算重复的数目

  7. 7

    将对象不变地添加到作为对象属性的数组并返回新对象的简便方法

  8. 8

    基于不重复的现有对象创建新的对象数组

  9. 9

    在数组中查找重复的对象值并将其合并-JAVASCRIPT

  10. 10

    检查包含对象作为数组的数组中的重复项

  11. 11

    根据对象数组中的value属性查找重复对象,然后减少将重复对象与其label属性连接起来的数组

  12. 12

    在数组中查找重复项

  13. 13

    在数组中查找重复项

  14. 14

    在数组Ruby中查找重复项

  15. 15

    在数组中查找重复项

  16. 16

    在数组中查找重复的整数

  17. 17

    在数组中查找重复项

  18. 18

    在数组中查找重复的字母 (javascript)

  19. 19

    从数组中删除重复对象

  20. 20

    在数组中查找重复和唯一值,然后在对象中将字符串转换为数组

  21. 21

    在数组中查找具有特定属性的项目,然后计算数量,然后使用具有各自结果的对象创建新数组

  22. 22

    Javascript-在对象数组中查找(不删除)具有重复属性的元素

  23. 23

    按属性在对象数组中查找重复项的最短方法

  24. 24

    从对象数组中删除重复项,并在JavaScript中添加新值(例如,数量)

  25. 25

    在数组中查找元素并返回父对象

  26. 26

    在多维数组中查找重复值并创建不包含重复项的新多维数组

  27. 27

    如何从嵌套在数组对象内部的数组中删除重复的对象值?

  28. 28

    在数组中查找具有属性的对象

  29. 29

    在对象数组中查找重复元素

热门标签

归档