我如何才能在 Javascript 的数组中仅搜索 object.keys 的细节?

How can I search only in specifics object.keys in a array in Javascript?

我有以下数组:

arr = [
  { id: '1', name: 'Something', code: 'A33', number: '67', house: 'St55' },
  { id: '2', name: 'Another', code: '55', number: '004', house: 'ES' },
  { id: '3', name: 'One more', code: 'DAE', number: '003', house: 'R5' },
];

我正在使用下面的函数 () 作为搜索栏来搜索对象数组 (arr) 的所有字段,具体取决于用户输入 (value) :

function findInValues(arr, value) {
  value = String(value).toLowerCase();
  return arr.filter(o =>
    Object.entries(o).some(entry =>
      String(entry[1]).toLowerCase().includes(value)
    )
  );
}

但要解决我的情况,该函数只能搜索键 namehouse,搜索必须忽略 idcodenumber.

例如:

value = 55

Result = [
      { id: '1', name: 'Something', code: 'A33', number: '67', house: 'St55' }
     ];

我的情况应该怎么办?

您可以解构要从要过滤的对象中忽略的键 idcodenumber,然后使用休息语法 ...o。然后,您可以使用当前用于搜索 o 对象的相同代码。请注意,在下面,我还将 Object.entries() 更改为 Object.values(),因为您的代码未使用条目数组中的键:

const arr = [
  { id: '1', name: 'Something', code: 'A33', number: '67', house: 'St55' },
  { id: '2', name: 'Another', code: '55', number: '004', house: 'ES' },
  { id: '3', name: 'One more', code: 'DAE', number: '003', house: 'R5' },
];

function findInValues(arr, value) {
  value = String(value).toLowerCase();
  return arr.filter(({id, code, number, ...o}) =>
    Object.values(o).some(val =>
      String(val).toLowerCase().includes(value)
    )
  );
}

console.log(findInValues(arr, 55));

否则,如果您知道要搜索的键(即:namehouse),那么您可以明确地检查它们:

const arr = [
  { id: '1', name: 'Something', code: 'A33', number: '67', house: 'St55' },
  { id: '2', name: 'Another', code: '55', number: '004', house: 'ES' },
  { id: '3', name: 'One more', code: 'DAE', number: '003', house: 'R5' },
];

function findInValues(arr, value) {
  value = String(value).toLowerCase();
  const search = ['name', 'house'];
  return arr.filter(o => search.some(key => o[key].toLowerCase().includes(value)));
}

console.log(findInValues(arr, 55));

更短的版本! :)

function findInValues(arr, value) {
    value = String(value).toLowerCase();
    return arr.filter(({
            name,
            house
        }) =>
        (name.toLowerCase() == value || house.toLowerCase() == value)
    );
}