在Javascript中从不在数组中的对象中删除键

Aks*_*ari 2 javascript node.js

假设我有一个包含许多键的对象列表,我只想保留其中的某些键。这就是我的做法。

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;
})
Run Code Online (Sandbox Code Playgroud)

输出 :

[ { a: 1, b: 2 }, { a: 1} ]
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来完成这项工作。任何帮助表示赞赏。

jfr*_*d00 6

一些改进。

  1. 您正在使用.map()which 创建一个新数组,但是您只是将其分配给旧变量。所以,你显然根本不需要创建一个新数组,你可以迭代你拥有的数组并修改它。

  2. 将您想要保留的属性放在一个Set而不是一个Array潜在更快的查找中。

  3. for/of.forEach()由于更好的流控制选项(中断、继续、返回等)和编译器优化的更多机会,循环通常比循环更受青睐。

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);
Run Code Online (Sandbox Code Playgroud)