我如何检查对象数组是否包含字符串数组中的键?
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]}
),
{},
));
很简单,不需要任何嵌套循环。有两种选择
- 使用
includes
函数
const result = arr.filter((item) => !result.includes(item.id));
- 使用
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))
我们有一个对象数组,例如
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]}
),
{},
));
很简单,不需要任何嵌套循环。有两种选择
- 使用
includes
函数
const result = arr.filter((item) => !result.includes(item.id));
- 使用
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))