簡體   English   中英

刪除 Javascript 中不需要的 object 密鑰和未定義?

[英]Removing unwanted object keys & undefined in Javascript?

這是我的數組:

const
    array1 = [
  {
    "value": "0",
    "name": "5",
    "waste": "remove",
    "city": "NY"
  },
  {
    "value": "0",
    "name": "51",
    "waste": "remove",
  }
]

所以現在,我想刪除某些並用對象組成一個新數組:例如,我需要刪除“Waste & value”並保留 rest 的東西,所以我使用了這個代碼:

var keys_to_keep = ['name', 'city']

const result = array2.map(e => {
  const obj = {};
  keys_to_keep.forEach(k => obj[k] = e[k])
  return obj;
});

console.log(result)

它給出了 output 作為

[ { name: '5', city: 'NY' }, { name: '51', city: undefined } ]

現在您可以看到具有未定義值的城市,如何刪除它? 我的意思是過濾這個並只顯示具有值的鍵,

所以我的問題是如何過濾未定義的,還有沒有其他更好的解決方案來刪除不需要的 object 鍵並顯示帶有所需鍵的新數組? 或者正在使用的方法是否足夠高效?

您可以檢查您的 forEach 中的值是否未定義:

const result = array2.map(e => {
  const obj = {};
  keys_to_keep.forEach(k => { 
      if (undefined !== e[k]) {
          obj[k] = e[k]
      }
  )

  return obj;
});

您可以通過使用.hasOwnProperty()檢查e object 是否具有屬性k來檢查是否在將e[k]添加到obj之前對其進行了定義:

 const array = [{ "value": "0", "name": "5", "waste": "remove", "city": "NY" }, { "value": "0", "name": "51", "waste": "remove", } ]; const keys_to_keep = ['name', 'city']; const result = array.map(e => { const obj = {}; keys_to_keep.forEach(k => { if (e.hasOwnProperty(k)) obj[k] = e[k] }); return obj; }); console.log(result)

如果您要刪除的鍵不是動態的,您還可以使用解構賦值來提取您要丟棄的屬性,並使用 rest 語法獲取沒有這些屬性的 object:

 const array = [{ "value": "0", "name": "5", "waste": "remove", "city": "NY" }, { "value": "0", "name": "51", "waste": "remove", } ]; const result = array.map(({value, waste, ...r}) => r); console.log(result)

我將回答這兩個部分。 因此,這是執行此操作的步驟。

  • 在主數組上使用map()
  • 使用Object.entries()獲取每個 object 的條目。
  • 在整個數組上應用filter()刪除那些 key 不存在於keys_to_keep中的整體

現在是第二部分。

  • 使用keys_to_keep創建一個 object,其中包含每個鍵的未定義值。
  • 在 prev 結果上再次使用map()並使用 Spread 運算符。 首先傳播上面創建的object,然后傳播原始值。 這樣,如果找不到任何鍵,它將被設置為undefined

 const array1 = [ { "value": "0", "name": "5", "waste": "remove", "city": "NY" }, { "value": "0", "name": "51", "waste": "remove", } ] var keys_to_keep = ['name', 'city'] let obj = Object.fromEntries(keys_to_keep.map(x => [x, undefined])); const res = array1.map(obj => Object.fromEntries( Object.entries(obj).filter(([k, v]) => keys_to_keep.includes(k)))).map(x => ({...obj, ...x})) console.log(res)

You can use .map to iterate over the objects, Object.entries to get the key-value pairs of each item, Object.fromEntries to group them into the resulting objects, and .filter to get only the entries with a key in keys_to_keep and一個undefinedvalue

 const array1 = [ { "value": "0", "name": "5", "waste": "remove", "city": "NY" }, { "value": "0", "name": "51", "waste": "remove" } ]; var keys_to_keep = ['name', 'city']; const result = array1.map(item => Object.fromEntries( Object.entries(item).filter(([key, value]) => keys_to_keep.includes(key) && value;== undefined ) ) ). console.log(result)

暫無
暫無

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

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