在 Ramda.js 中按 属性 筛选对象

Filtering an object by property in Ramda.js

我是 Ramda.js 的新手,想知道如何根据指定的属性过滤对象。

查看 R.filter,似乎 _.filter 仅传递对象 value 而不是 属性。比如REPL中给出的例子:

var isEven = (n, prop) => {
  console.log(typeof prop);

  // => 
  // undefined
  // undefined
  // undefined
  // undefined

  return n % 2 === 0;
}

R.filter(isEven, {a: 1, b: 2, c: 3, d: 4}); //=> {b: 2, d: 4}

如果我有以下对象:

const obj = {a: 1, b: 2, c: 3};

我想要的结果是:

const filterProp = (x) => /* some filter fn */;

filterProp('b')(obj);

// => {a: 1, c: 3};

如何使用 Ramda 过滤对象的属性?

在深入研究 Ramda 文档后,我发现 R.omit 满足我的特定用例。

const obj = {a: 1, b: 2, c: 3};

R.omit(['b'], obj);

// => {a: 1, c: 3};

使用 pickBy 方法可以根据键过滤集合。

const obj = {a: 1, b: 2, c: 3};
var predicate = (val, key) => key !== 'b';
R.pickBy(predicate, obj);
// => {a: 1, c: 3}