遍历对象数组并创建一个新对象

坦乔尔·拉吉

我有一组这样的对象:

[
  {id:1,val: 5,name: 'Josh'},
  {id:2,val: 7,name: 'John'},
  {id:3,val: 6,name:'mike'},
  {id:4,val: 7,name: 'Andy'},
  {id:5,val: 8,name: 'Andrew'},
  {id:6,val: 7,name: 'Dave'}
]

我希望所有 id 都在一个 val 字段相同的数组中,并从对象数组中删除相似的对象

[
  {id:1,val: 5,name: 'Josh'},
  {id:3,val: 6,name: 'mike'},
  {id:5,val: 8,name: 'Andrew'},
  {id:[6,4,2],val: 7,name: ['Dave','Andy','John']}
]
海鸥

@Tanjore,更好的是您尝试按如下方式在对象内组织您的 id。

所有具有值的 id51在这里 so {'5': [1]}

所有具有值的 id63在这里 so {'3': [3]}

所有具有值的 id72, 3, 4在这里 so {'7': [2, 3, 4]}

...

我们可以有一个与此类似的对象。

{
    "5": [
        1
    ],
    "6": [
        3
    ],
    "7": [
        2,
        4,
        6
    ],
    "8": [
        5
    ]
}

让我们在Node REPL上创建上述对象

> var arr = [
...   {id:1,val: 5,name: 'Josh'},
...   {id:2,val: 7,name: 'John'},
...   {id:3,val: 6,name:'mike'},
...   {id:4,val: 7,name: 'Andy'},
...   {id:5,val: 8,name: 'Andrew'},
...   {id:6,val: 7,name: 'Dave'}
... ]
undefined
>
> var obj = {}
undefined
>
> arr.forEach((item) => {
... if (obj[item['val']] === undefined) {
..... obj[item['val']] = [item['id']];
..... } else {
..... obj[item['val']].push(item['id']);
..... }
... })
undefined
>
> obj
{ '5': [ 1 ], '6': [ 3 ], '7': [ 2, 4, 6 ], '8': [ 5 ] }
>
> JSON.stringify(obj, undefined, 4)
'{\n    "5": [\n        1\n    ],\n    "6": [\n        3\n    ],\n    "7": [\n        2,\n        4,\n        6\n    ],\n    "8": [\n        5\n    ]\n}'
>
> console.log(JSON.stringify(obj, undefined, 4))
{
    "5": [
        1
    ],
    "6": [
        3
    ],
    "7": [
        2,
        4,
        6
    ],
    "8": [
        5
    ]
}
undefined
>

最后,您可以根据上述概念获得您想要的以下数组。

[
    {
        "id": 1,
        "val": 5,
        "name": "Josh"
    },
    {
        "id": 3,
        "val": 6,
        "name": "mike"
    },
    {
        "id": [
            2,
            4,
            6
        ],
        "val": 7,
        "name": [
            "John",
            "Andy",
            "Dave"
        ]
    },
    {
        "id": 5,
        "val": 8,
        "name": "Andrew"
    }
]

检查下面的代码,它为您提供了您想要的数组。

// Input array
var arr = [
    {id:1,val: 5,name: 'Josh'},
    {id:2,val: 7,name: 'John'},
    {id:3,val: 6,name:'mike'},
    {id:4,val: 7,name: 'Andy'},
    {id:5,val: 8,name: 'Andrew'},
    {id:6,val: 7,name: 'Dave'}
]

// Empty array which we'll use to get our result and easily find the objects with similar values for 'val'
var obj = {};

arr.forEach((item) => {
    if (obj[item['val']] === undefined) {
        obj[item['val']] = item;
    } else {
        var id = obj[item['val']]['id'];
        var name = obj[item['val']]['name'];

        if(typeof id === 'number'){
            obj[item['val']]['id'] = [id, item['id']];
            obj[item['val']]['name'] = [name, item['name']];
        } else { // 'object'
            obj[item['val']]['id'].push(item['id']);
            obj[item['val']]['name'].push(item['name']);
        }
    }
})


var newArr = Object.values(obj);
// console.log(newArr);

// Pretty printing newArr
console.log(JSON.stringify(newArr, undefined, 4));

/*
    [
        {
            "id": 1,
            "val": 5,
            "name": "Josh"
        },
        {
            "id": 3,
            "val": 6,
            "name": "mike"
        },
        {
            "id": [
                2,
                4,
                6
            ],
            "val": 7,
            "name": [
                "John",
                "Andy",
                "Dave"
            ]
        },
        {
            "id": 5,
            "val": 8,
            "name": "Andrew"
        }
    ]
*/

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

循环遍历对象数组并创建一个真值数组

来自分类Dev

使用每个数组创建一个新对象

来自分类Dev

从 JSON 对象创建一个新的 jQuery 数组

来自分类Dev

创建一个基于先前值的新对象数组

来自分类Dev

PHP - 创建一个新对象数组

来自分类Dev

如何基于数组和另一个对象创建一个新对象?

来自分类Dev

遍历对象数组与另一个对象数组

来自分类Dev

如何从我当前的对象数据数组中创建一个新的对象数组

来自分类Dev

期望创建一个新对象

来自分类Dev

遍历对象,其中Value是对象数组,并从对象数组的每个对象返回一个值

来自分类Dev

相交两个对象数组,然后从两个对象数组创建一个新数组

来自分类Dev

创建一个JSON对象数组

来自分类Dev

创建一个 PHP 对象数组

来自分类Dev

创建一个新的对象数组并合并具有相同值的对象

来自分类Dev

如何用一串值分解一个对象以创建一个新的对象数组?

来自分类Dev

复制模板对象以从中创建一个新对象

来自分类Dev

forEach和map函数迭代对象的嵌套json数组并创建一个新数组

来自分类Dev

计算json数组对象并使用SUM结果创建一个新数组

来自分类Dev

从Javascript中的对象数组创建一个对象

来自分类Dev

循环遍历对象并创建新数组

来自分类Dev

遍历对象数组以查找一个值是否不同

来自分类Dev

JavaScript-在带有计数的对象数组中查找唯一值,并创建一个新的对象数组

来自分类Dev

用另一个数组过滤一个数组并创建新对象?

来自分类Dev

如何根据另一个对象数组的值创建一个对象数组?

来自分类Dev

以编程方式基于另一个对象数组创建一个对象数组

来自分类Dev

检查对象数组中的重复条目并创建一个新条目

来自分类Dev

PowerShell创建一个新对象并将值添加到数组

来自分类Dev

创建一个新的对象数组,而无需重复键值对

来自分类Dev

遍历嵌套的对象数组,与另一个对象数组匹配

Related 相关文章

  1. 1

    循环遍历对象数组并创建一个真值数组

  2. 2

    使用每个数组创建一个新对象

  3. 3

    从 JSON 对象创建一个新的 jQuery 数组

  4. 4

    创建一个基于先前值的新对象数组

  5. 5

    PHP - 创建一个新对象数组

  6. 6

    如何基于数组和另一个对象创建一个新对象?

  7. 7

    遍历对象数组与另一个对象数组

  8. 8

    如何从我当前的对象数据数组中创建一个新的对象数组

  9. 9

    期望创建一个新对象

  10. 10

    遍历对象,其中Value是对象数组,并从对象数组的每个对象返回一个值

  11. 11

    相交两个对象数组,然后从两个对象数组创建一个新数组

  12. 12

    创建一个JSON对象数组

  13. 13

    创建一个 PHP 对象数组

  14. 14

    创建一个新的对象数组并合并具有相同值的对象

  15. 15

    如何用一串值分解一个对象以创建一个新的对象数组?

  16. 16

    复制模板对象以从中创建一个新对象

  17. 17

    forEach和map函数迭代对象的嵌套json数组并创建一个新数组

  18. 18

    计算json数组对象并使用SUM结果创建一个新数组

  19. 19

    从Javascript中的对象数组创建一个对象

  20. 20

    循环遍历对象并创建新数组

  21. 21

    遍历对象数组以查找一个值是否不同

  22. 22

    JavaScript-在带有计数的对象数组中查找唯一值,并创建一个新的对象数组

  23. 23

    用另一个数组过滤一个数组并创建新对象?

  24. 24

    如何根据另一个对象数组的值创建一个对象数组?

  25. 25

    以编程方式基于另一个对象数组创建一个对象数组

  26. 26

    检查对象数组中的重复条目并创建一个新条目

  27. 27

    PowerShell创建一个新对象并将值添加到数组

  28. 28

    创建一个新的对象数组,而无需重复键值对

  29. 29

    遍历嵌套的对象数组,与另一个对象数组匹配

热门标签

归档