我如何检查对象数组是否包含字符串数组中的键?

how can i check if an array of objects contains a key which is in array of strings js?

我们有一个对象数组,例如

const arr = [{id: "someId", name: {...}}, ...];
const skippedKeys = ["id"...]

如何根据跳过的键过滤对象数组? 结果应该是:

const result = [{name: {...}}, ...];

我也不想在循环中做一个循环。 结果也可以使用 lodash 库来实现。 我们也应该删除带有值的键。

const result = arr.map(obj =>
  Object.keys(obj).reduce(
    (res, key) => (
      skippedKeys.includes(key) ? res : {...res, [key]: obj[key]}
    ),
    {},
));

很简单,不需要任何嵌套循环。有两种选择

  1. 使用includes函数
    const result = arr.filter((item) => !result.includes(item.id));
  1. 使用set
    const dataSet = new Set(skippedKeys);
    const result = arr.filter((item) => !dataSet.has(item.id));

我更喜欢第二个,因为它排除了双重检查。希望回答对您有所帮助。

既然你说可以用lodash来实现,下面是一些使用lodash的代码:

let result = _.map(arr, (el)=> _.omit(el, skippedKeys))