javascript - Lodash 的纯 JavaScript 替换 `omit()`

标签 javascript lodash

我一直在寻找 Lodash omit() 的替代品仅使用 JavaScript。这就是我想要实现的目标:

function omit(obj, attr) {
  // @obj: original object
  // @attr: string, attribute I want to omit
  // return a new object, do not modify the original object
}

到目前为止,我已经找到了这个解决方案:
let { attr, ...newObj } = obj;

但它只适用于 attr是已知的。我要attr是动态的,所以 attr应该是一个字符串。我该怎么做?

最佳答案

_.omit() 功能支持排除多个键。该函数接受参数列表、键数组或参数和数组的组合。要保留该功能,您可以使用 rest parameters , flatten他们到 Set , 通过 Object.entries() 将对象转换为条目数组,对其进行过滤,然后使用 Object.fromEntries() 转换回对象.

function omit(obj, ...keys) {
  const keysToRemove = new Set(keys.flat()); // flatten the props, and convert to a Set
  
  return Object.fromEntries( // convert the entries back to object
    Object.entries(obj) // convert the object to entries
      .filter(([k]) => !keysToRemove.has(k)) // remove entries with keys that exist in the Set
  );
}

console.log(omit({ foo: 'foo', bar: 'bar', baz: 'baz' }, 'bar'));
console.log(omit({ foo: 'foo', bar: 'bar', baz: 'baz' }, 'bar', 'baz'));
console.log(omit({ foo: 'foo', bar: 'bar', baz: 'baz' }, ['bar', 'baz']));
console.log(omit({ foo: 'foo', bar: 'bar', baz: 'baz' }, 'bar', ['baz']));

关于javascript - Lodash 的纯 JavaScript 替换 `omit()`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58786590/

相关文章:

javascript - 如何使用lodash根据条件获取JavaScript中两个数组之间的差异?

javascript - knockout js根据文本框值更改div宽度

javascript - 前端最小化加载时间

javascript - 范围不是 lodash 中的函数?

Javascript删除合并某些属性的对象列表中的重复项

javascript - 检查任何对象的 'undefined' 或 'null'

javascript - 如何使用 lodash _isEmpty 检查对象是否为空?

javascript - 在 Internet Explorer 中运行本地 'Javascript Dependant' HTML 文件

javascript - 我如何在客户端(即网络浏览器)找到 MAC 地址?

javascript - AngularJS:具有不同属性的数组数组中的 ngIf