javascript数组映射一个属性

问题描述 投票:-1回答:4

我有两个阵列

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
javascript arrays
4个回答
1
投票

我使用isAdmin: trueArray(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} 进行了现场演示,请参阅下面的代码:


1
投票

你可以使用.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

0
投票

这个问题的一个解决方案可能是首先从第一个阵列的some创建一个const next = users.map(user => Object.assign({}, user, { isAdmin: data.some(d => d.Username === user.username), }) ); 。然后你可以循环第二个数组,如果Set出现在提到的usernames上,我们将username属性更改为Set

isAdmin

0
投票

首先,为了简化第一个数组中存在的检查,让我们把它变成一个映射:

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; });
© www.soinside.com 2019 - 2024. All rights reserved.