我有两个阵列
Array(4)
0: {Username: "admin", Enabled: true, ...}
1: {Username: "ftyjfj", Enabled: true, ...}
2: {Username: "ghjfgj", Enabled: true, ...}
3: {Username: "foo", Enabled: true, ...}
Array(4)
0: User {username: "foo", email: "[email protected]", enabled: true, status: "CONFIRMED", isAdmin: false}
1: User {username: "admin", email: "[email protected]", enabled: true, status: "CONFIRMED", isAdmin: false}
2: User {username: "sgrillon", email: "[email protected]", enabled: true, status: "CONFIRMED", isAdmin: false}
3: User {username: "toto", email: "[email protected]", enabled: true, status: "CONFIRMED", isAdmin: false}
如果第一个数组中存在qazxsw poi(在isAdmin
attribut上),我想从第二个数组更改qazxsw poi属性。
所以:username
为foo和admin:
Username
我使用isAdmin: true
和Array(4)
0: User {username: "foo", email: "[email protected]", enabled: true, status: "CONFIRMED", isAdmin: true}
1: User {username: "admin", email: "[email protected]", enabled: true, status: "CONFIRMED", isAdmin: true}
2: User {username: "sgrillon", email: "[email protected]", enabled: true, status: "CONFIRMED", isAdmin: false}
3: User {username: "toto", email: "[email protected]", enabled: true, status: "CONFIRMED", isAdmin: false}
进行了现场演示,请参阅下面的代码:
你可以使用.some
+ var a = [{
Username: "admin"
}, {
Username: "ftyjfj"
}, {
Username: "ghjfgj"
}, {
Username: "foo"
}]
var b = [{
username: "foo",
email: "[email protected]",
enabled: true,
status: "CONFIRMED",
isAdmin: false
}, {
username: "admin",
email: "[email protected]",
enabled: true,
status: "CONFIRMED",
isAdmin: false
}, {
username: "sgrillon",
email: "[email protected]",
enabled: true,
status: "CONFIRMED",
isAdmin: false
}, {
username: "toto",
email: "[email protected]",
enabled: true,
status: "CONFIRMED",
isAdmin: false
}]
b.forEach(obj => {
if (a.some(val => val.Username === obj.username)) {
obj.isAdmin = true;
}
return obj;
})
console.log(b)
的组合。这是一个解决方案:
map
首先,为了简化第一个数组中存在的检查,让我们把它变成一个映射:
true
然后,我们可以通过简单地检查用户名是否存在于地图中的关键字来轻松更新您的第二个数组:
var arr1 = [
{username: "admin", enabled: true},
{username: "ftyjfj", enabled: true},
{username: "ghjfgj", enabled: true},
{username: "foo", enabled: true}
];
var arr2 = [
{username: "foo", email: "[email protected]", enabled: true, status: "CONFIRMED", isAdmin: false},
{username: "admin", email: "[email protected]", enabled: true, status: "CONFIRMED", isAdmin: false},
{username: "sgrillon", email: "[email protected]", enabled: true, status: "CONFIRMED", isAdmin: false},
{username: "toto", email: "[email protected]", enabled: true, status: "CONFIRMED", isAdmin: false}
];
let adminSet = new Set(arr1.map(o => o.username));
arr2.forEach(x => adminSet.has(x.username) && (x.isAdmin = true));
console.log(arr2);
或者我们可以使用let mappedUsers = firstArray.reduce((m, el) => { m[el.username] = el; return m; }, {});
遍历每个元素并相应地更新它:
secondArray.map(el => { if (el.username in mappedUsers) { el.isAdmin = true; } return el; });