读取属性name
时,将属性user3
的{{1}}和相同的属性放入等于user2
值的对象属性name
中。
我要打印出来:
a
我的代码:
[
{
name: 'b',
user1: 'haha',
},
{
name: 'a',
user2: 'apple',
user3: 'xiaomi'
}
]
答案 0 :(得分:1)
下面的代码将首先使相同的name
字段已知,然后将它们合并。
var make_unique = function(xs, key) {
// find same name fields
let tmp_result = xs.reduce(function(rv, x) {
(rv[x[key]] = rv[x[key]] || []).push(x);
return rv;
}, {});
// merge the same ones
return Object.keys(tmp_result).map(item => {
return tmp_result[item].reduce(function(rv, x) {
return Object.assign(rv,x)
}, {});
})
};
要调用它:
make_unique(data,'name')
答案 1 :(得分:1)
您可以使用for循环查找相同的元素,并将其分配给另一个,然后使用splice方法从数组中删除找到的元素
var data = [{
name: 'b',
user1: 'haha',
},
{
name: 'a',
user2: 'apple',
},
{
name: 'a',
user3: 'xiaomi'
}
]
for (var i=0 ; i<data.length;i++){
for(var j=i+1;j<data.length;j++){
if(data[i].name===data[j].name){
Object.assign(data[i],data[j])
data.splice(j,1)
}
}
}
console.log(data)
答案 2 :(得分:1)
reduce
在数据上创建一个对象,其键设置为名称值,然后返回该对象的Object.values
:
var data = [{ name: 'b', user1: 'haha' }, { name: 'a', user2: 'apple' }, { name: 'a', user3: 'xiaomi' }];
function groupByName(arr) {
return Object.values(data.reduce((acc, c) => {
const { name, ...rest } = c;
acc[name] = acc[name] || {};
acc[name] = { ...acc[name], name, ...rest };
return acc;
}, {}));
}
const output = groupByName(data);
console.log(output);