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

时间:2018-06-25 08:25:27

标签: javascript arrays

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

[
  {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']}
]

1 个答案:

答案 0 :(得分:0)

@Tanjore ,更好的是,您尝试按以下方式组织对象中的ID。

  

所有值为5(此处为1,因此{'5': [1]}的id。

     

所有值为6(此处为3,因此{'3': [3]}的id。

     

所有值为7的{​​{1}}都是2, 3, 4

     

...

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

{'7': [2, 3, 4]}

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

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

最后,您可以根据以上概念获得所需的以下数组。

> 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"
    }
]