我有大量用户,其中包含3种不同的用户类型("Admin"
,"Moderator"
,"User"
)。每个用户都将拥有以下属性:("name"
,"companyId"
,"type"
)。
第一个方法function orchestrateUsers(users)
(我设法编码)将采用1个参数:一个用户数组,必须根据用户属性“type”返回一个分组列表。
第二种方法将采用4个参数:分组列表(第一种方法的结果),要包含在搜索中的用户类型数组,表示要过滤的用户属性的字符串和表示值的字符串用户财产。此方法必须根据搜索参数返回用户数组。
我需要第二种方法的帮助。
const users = [{
"name": "Joe",
"companyId": "A2100",
"type": "Admin"
}, {
"name": "Jane",
"companyId": "A2100",
"type": "Moderator"
}, {
"name": "Smith",
"companyId": "A2100",
"type": "User"
}, {
"name": "Smith",
"companyId": "A2100",
"type": "User"
}, {
"name": "Rocket",
"companyId": "A3100",
"type": "Admin"
}, {
"name": "Rick",
"companyId": "A3100",
"type": "User"
}, {
"name": "Tim",
"companyId": "A4100",
"type": "Admin"
}]
function orchestrateUsers(users) {
let result = {};
users.forEach(user => {
if (result[user.type]) result[user.type].push(user.name);
else result[user.type] = [user.name];
});
return result;
}
console.log(orchestrateUsers(users));
//second method
function searchUsers(orchestratedUsers, userTypes, property, value) {
//need help here
userTypes.forEach(userType => {
if (userTypes.find(userType => userType === "User")) {
console.log(userType);
}
});
}
答案 0 :(得分:1)
我不明白为什么您需要为第二个版本分组用户,并且应该能够使用Array#filter
。
过滤器只需要检查2个条件...... type
数组中的userTypes
以及对象属性与输入value
匹配。
设置值匹配以比较小写字符串和使用的部分匹配
const users = [{ "name": "Joe", "companyId": "A2100", "type": "Admin" }, { "name": "Jane", "companyId": "A2100", "type": "Moderator" }, { "name": "Smith", "companyId": "A2100", "type": "User" }, { "name": "Smith", "companyId": "A2100", "type": "User" }, { "name": "Rocket", "companyId": "A3100", "type": "Admin" }, { "name": "Rick", "companyId": "A3100", "type": "User" }, { "name": "Tim", "companyId": "A4100", "type": "Admin" } ]
function searchUsers(array, userTypes, property, value) {
value = value.toLowerCase();// compare both in same case
return array
.filter(o => userTypes.includes(o.type) && o[property].toLowerCase().includes(value))
}
// input variables
const userTypes = ['Admin','User'],
prop = 'name',
value = 'smit';// lowercase partial of "Smith"
const res = searchUsers(users, userTypes, prop , value )
console.log(res)