[英]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.