我有两个这样的对象数组:
let data1 = [ { userid_b: 'dan12345' }, { userid_b: 'emma12345' } ]
let data2 =[
{ username: 'dan', userid: 'dan12345' },
{ username: 'johndoe', userid: 'john12345' },
{ username: 'emma', userid: 'emma12345' },
{ username: 'Bob', userid: 'bob12345' },
{ username: 'Sam', userid: 'sam12345' }
]
我想比较这两个userid_b
和userid
,如果它们相同,我想向data2
添加一个新属性。
所以我想要这样的结果:
let data2 =[
{ username: 'dan', userid: 'dan12345', newAttribute: true },
{ username: 'johndoe', userid: 'john12345' },
{ username: 'emma', userid: 'emma12345', newAttribute: true },
{ username: 'Bob', userid: 'bob12345' },
{ username: 'Sam', userid: 'sam12345' }
]
我怎样才能做到这一点?
答案 0 :(得分:1)
循环两个数组并比较值,必要时进行分配:
var data1 = [
{ userid_b: 'dan12345' },
{ userid_b: 'emma12345' }
];
var data2 = [
{ username: 'dan', userid: 'dan12345' },
{ username: 'johndoe', userid: 'john12345' },
{ username: 'emma', userid: 'emma12345' },
{ username: 'Bob', userid: 'bob12345' },
{ username: 'Sam', userid: 'sam12345' }
];
// Loop the main array
for (var i = 0; i < data2.length; i++) {
// Loop the second array
for (var j = 0; j < data1.length; j++) {
// If the user id matches
if (data2[i].userid == data1[j].userid_b) {
// Add the attribute
data2[i].newAttribute = true;
// Break out of the the 'j' loop to stop unnecessary iterations
break;
}
}
}
console.log(data2);
&#13;
答案 1 :(得分:0)
将new Map()
转换为data2
,然后只要userid
在地图中添加newAttribute
道具,就会迭代const data1 = [ { userid_b: 'dan12345' }, { userid_b: 'emma12345' } ]
const data2 =[
{ username: 'dan', userid: 'dan12345' },
{ username: 'johndoe', userid: 'john12345' },
{ username: 'emma', userid: 'emma12345' },
{ username: 'Bob', userid: 'bob12345' },
{ username: 'Sam', userid: 'sam12345' }
];
const usersSet = new Set(data1.map((item) => item.userid_b));
data2.forEach((item) => usersSet.has(item.userid) && (item.newAttribute = true));
console.log(data2);
:
{{1}}
答案 2 :(得分:0)
你可以使用foreach循环遍历数组,见下文
var data1 = [ { userid_b: 'dan12345' }, { userid_b: 'emma12345' } ];
var data2 =[
{ username: 'dan', userid: 'dan12345' },
{ username: 'johndoe', userid: 'john12345' },
{ username: 'emma', userid: 'emma12345' },
{ username: 'Bob', userid: 'bob12345' },
{ username: 'Sam', userid: 'sam12345' }
];
data1.forEach(function(data1record,index,data1arr){
data2.forEach(function(data2record,data2idx,data2arr){
if(data1record.userid_b===data2record.userid){
data2record["newAttribute"]=true;
}
})
});
console.log(data2);
答案 3 :(得分:0)
// Make an array of new users for easy lookup.
const newUsers = data1.map(elt => elt.userid_b);
// Filter data2 down to only matching elements, then add new attribute.
data2.filter(elt => newUsers.contains(elt.username))
.forEach(elt => elt.newAttribute = true);
答案 4 :(得分:0)
你也可以这样做。
let data1 = [{
userid_b: 'dan12345'
}, {
userid_b: 'emma12345'
}]
let data2 = [{
username: 'dan',
userid: 'dan12345'
}, {
username: 'johndoe',
userid: 'john12345'
}, {
username: 'emma',
userid: 'emma12345'
}, {
username: 'Bob',
userid: 'bob12345'
}, {
username: 'Sam',
userid: 'sam12345'
}];
var userIds = data1.map(function(obj) {
return obj.userid_b;
});
var result = data2.map(function(dataObj) {
if (userIds.includes(dataObj.userid)) {
dataObj.newAttribute = true;
}
return dataObj;
});
console.log(result);
&#13;
答案 5 :(得分:0)
从第一个数组的对象中获取用户名(值):
var data1_values = data1.map(o => {
return o.userid_b;
});
结果为data1_values = ['dan12345', 'emma12345']
。
现在,使用data2
浏览map()
的对象。检查
data1_values.indexOf(o.userid) > -1
(o
是data2
)
如果data1_values
中有o.userid
。
总计:
let data1 = [
{ userid_b: 'dan12345' },
{ userid_b: 'emma12345' }
];
let data2 = [
{ username: 'dan', userid: 'dan12345' },
{ username: 'johndoe', userid: 'john12345' },
{ username: 'emma', userid: 'emma12345' },
{ username: 'Bob', userid: 'bob12345' },
{ username: 'Sam', userid: 'sam12345' }
];
var data1_values = data1.map(o => {
return o.userid_b;
});
data2.map((o, i) => {
if(data1_values.indexOf(o.userid) > -1) {
data2[i]["newAttribute"] = true;
}
});
console.log(data2);
&#13;