我有一个这样的对象数组:
[
{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']}
]
答案 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"
}
]