使用索引搜索的JavaScript范围

时间:2018-01-30 16:05:13

标签: javascript arrays

我有大量用户,其中包含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);
    }
  });
}

1 个答案:

答案 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)