我有一组这样的对象:
[
{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。
所有具有值的 id
5
都1
在这里 so{'5': [1]}
。所有具有值的 id
6
都3
在这里 so{'3': [3]}
。所有具有值的 id
7
都2, 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] 删除。
我来说两句