如果索引与另一个数组匹配,从数组返回数据的最佳方法是什么?
我有一个用户集合:
Collection [Map] {
'531592097837613058' => {}
'460281004972572672' => {}
}
并且我有允许ID的数组:
const allowedRoles = ['523928765865394211'];
我要实现的是返回集合的对象,该对象的索引与AllowedRoles中的某些索引匹配。从理论上讲,这很简单,但是我误解了收集方法。
答案 0 :(得分:0)
如果您有一个用户地图(即userMap
)和一个要过滤用户的allowedRoles
数组,那么一种简单的获取新用户集合的方法就是到:
userMap
和allowedRoles
数组中,请在结果数组中包含用户值这可以表示为:
const userMap = {
'531592097837613058' : { user : "bob" },
'460281004972572672' : { user : "bill" },
'124' : { user : "joe" },
'523928765865394211' : { user : "sam" }
}
const allowedRoles = ['523928765865394211', '124'];
const allowedUsers = [];
/* Iterate entries of user map */
for(const [key, value] of Object.entries(userMap)) {
/* If key of user map present in allowed roles, add the value (user)
to allowed users */
if(allowedRoles.indexOf(key) !== -1) {
allowedUsers.push(value);
}
}
console.log(allowedUsers);
答案 1 :(得分:0)
假设users
是您的用户ID字典/地图,有两种方法可以完成您想要的操作:
// The functional way
result = allowedRoles.map(id => users[id]).filter(userData => userData != undefined)
// With loops
result = []
for(id of allowedRoles) {
if(users[id] != undefined) result.push(users[id])
}
答案 2 :(得分:0)
如果您知道allowedRoles
中的所有ID都存在于Collection
中,则可以映射到allowedRoles
并进行查找。如果allowedRoles
中可能存在其他ID,请先将其过滤掉:
let Collection = new Map ([
['531592097837613058', {name: "Fred"}],
['523928765865394211', {name: "Barney"}]
]);
const allowedRoles = ['523928765865394211'];
let roles = allowedRoles
//.filter(item => Collection.has(item)) // if you need it
.map(item => Collection.get(item))
console.log(roles)
由于Map
查找是恒定时间,因此应为O(n),其中n是allowedRoles
的长度