如何添加对象数组属性?
2019-07-24
53
读取属性
name
时,将属性
user2
的
user3
和相同属性放入一个等于
a
值的对象属性
name
中。
我要打印出来:
[
{
name: 'b',
user1: 'haha',
},
{
name: 'a',
user2: 'apple',
user3: 'xiaomi'
}
]
我的代码:
var data = [{
name: 'b',
user1: 'haha',
},
{
name: 'a',
user2: 'apple',
},
{
name: 'a',
user3: 'xiaomi'
}
]
var arr = []
for (var i = 0; i < data.length; i++) {
console.log(data[i].name)
}
3个回答
以下代码首先将使相同的
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')
Alireza HI
2019-07-24
您可以使用 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)
adel
2019-07-24
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);
Andy
2019-07-24