簡體   English   中英

在 Javascript 中,從 object 中刪除不在數組中的鍵

[英]In Javascript remove keys from object not in an Array

假設我有一個包含許多鍵的對象列表,並且我只想保留其中的某些鍵。 我就是這樣做的。

SO 上其他好的解決方案的問題是,如果鍵中不存在要保留的鍵,它仍然會添加一個鍵,值未定義的值。

let data = [{
   'a': 1,
   'b': 2,
   'c': 3
 }, 
 {
   'a': 1,
   'c': 3,
   'd': 4
 }]

const keys_to_keep = ['a', 'b']

data = data.map((obj) => {
  Object.keys(obj).forEach(function(key) {
    if(!keys_to_keep.includes(key))
      delete obj[key]
  });
  return obj;
})

Output:

[ { a: 1, b: 2 }, { a: 1} ]

有沒有更好的方法來完成這項工作。 任何幫助表示贊賞。

一些改進。

  1. 您正在使用.map()創建一個新數組,但是您只是將其分配給舊變量。 所以,你顯然根本不需要創建一個新數組,你可以迭代你擁有的數組並修改它。

  2. 將您想要保留的屬性放在Set而不是Array以便可能更快地查找。

  3. for/of循環通常比.forEach()循環更受青睞,因為它有更好的流控制選項(break、continue、return 等)和更多的編譯器優化機會。

 let kv = [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }] const l = new Set(['a', 'b']); for (let obj of kv) { for (let prop of Object.keys(obj)) { if (!l.has(prop)) { delete obj[prop]; } } } console.log(kv);

您可以在Object.fromEntries之后使用mapfilter以僅保留相關鍵:

 let data = [{'a': 1,'b': 2,'c': 3},{'a': 1,'c': 3,'d': 4}] const keys_to_keep = ['a', 'b'] var result = data.map(obj => Object.fromEntries(keys_to_keep.map(key => obj.hasOwnProperty(key) && [key, obj[key]] ).filter(Boolean)) ); console.log(result);

暫無
暫無

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

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