簡體   English   中英

從對象中省略展開數組

[英]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()方法來提高上述方法的效率。

您可以減少數組並只獲得一個沒有想要的鍵的對象。

它的工作原理是通過使用計算屬性從每個循環中的對象中刪除單個鍵並分配給新的變量名稱下划線,下划線不再使用並停留在對象解構中

結果你得到一個沒有不需要的鍵的對象。

 const subSet = (object, without) => without.reduce((o, k) => ({ [k]: _, ...o } = o, o), object); console.log(subSet({ a: 1, b: 2, c: 3 }, ['a', 'c']));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM