根据多个值或参数过滤 JSON 对象数组

sau*_*hah 1 javascript arrays attributes json filter

users = [
  {
    "username": "Alice",
    "firstName": "Alice-U",
    "lastName": "Wonderland"
  },
  {
    "username": "bob",
    "firstName": "Bob-u",
    "lastName": "Builder",
  },
  {
    "username": "charly",
    "firstName": "Charly-u",
    "lastName": "Brown",
  }
]
Run Code Online (Sandbox Code Playgroud)

我希望能够根据多个值过滤该数组,例如:

搜索条件:{ "username" : "Alice" }应返回:

{
    "username": "Alice",
    "firstName": "Alice-U",
    "lastName": "Wonderland"
}
Run Code Online (Sandbox Code Playgroud)

类似:{ "username" : "charly", "firstName": "Charly-u" }应该返回:

{
    "username": "charly",
    "firstName": "Charly-u",
    "lastName": "Brown",
}
Run Code Online (Sandbox Code Playgroud)

使用 javaScript 或 jQuery 进行精确字符串匹配。

Ama*_*dan 5

您可以使用它.every来检查每个条件键是否匹配:

function filterBy(list, criteria) {
  return list.filter(candidate =>
    Object.keys(criteria).every(key =>
      candidate[key] == criteria[key]
    )
  );
}

let users = [
  { "username": "Alice", "firstName": "Alice-U", "lastName": "Wonderland" },
  { "username": "bob", "firstName": "Bob-u", "lastName": "Builder" },
  { "username": "charly", "firstName": "Charly-u", "lastName": "Brown" }
];

console.log(filterBy(users, { "username" : "Alice" }));
console.log(filterBy(users, { "username" : "charly", "firstName": "Charly-u" }));
Run Code Online (Sandbox Code Playgroud)