[英]Omitting spread array from object
我有一个功能:
const mergedPartOfStateWithCurrentSearchValues = (object, valuesToOmit) => {
const {...valuesToOmit, ...rest } = object;
return rest;
};
第一个参数是一个对象。 第二个参数是要从对象中省略的字符串值数组。 我正在尝试返回其余部分。 所以这实际上并不像那样工作。 我也尝试使用 lodash:
const mergedPartOfStateWithCurrentSearchValues = (object, valuesToOmit) => {
const filteredObject = pickBy(object, function (value, key) {
return !valuesToOmit.includes(key)
})
return filteredObject;
};
它也不起作用。 我的想法不多了。 我怎样才能做我想做的事并保持这个功能的通用性?
您可以使用Object.entries()
对象的条目,然后使用.includes()
和.filter()
方法过滤掉出现在valuesToOmit
数组中的键的条目。 然后,您可以使用Object.fromEntries()
从这些过滤的条目中构建一个对象:
const object = {a: 1, b: 2, c: 3}; const valuesToOmit = ['a', 'c'] const mergedPartOfStateWithCurrentSearchValues = (object, valuesToOmit) => { return Object.fromEntries( Object.entries(object).filter(([k]) => !valuesToOmit.includes(k)) ); } const res = mergedPartOfStateWithCurrentSearchValues(object, valuesToOmit); console.log(res);
如果您不能支持Object.fromEntries()
,您可以将Object.entries()
返回的条目映射到对象,然后使用Object.assign()
将它们合并为一个更大的对象:
const object = {a: 1, b: 2, c: 3}; const valuesToOmit = ['a', 'c'] const mergedPartOfStateWithCurrentSearchValues = (object, valuesToOmit) => { return Object.assign( ...Object.entries(object).filter(([k]) => !valuesToOmit.includes(k)).map(([k, v]) => ({[k]: v})) ); } const res = mergedPartOfStateWithCurrentSearchValues(object, valuesToOmit); console.log(res);
注意:您可以通过将valuesToOmit
设为ES6 Set ,然后使用.has()
方法而不是.includes()
方法来提高上述方法的效率。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.