在Ramda.js中按属性过滤对象

时间:2016-07-01 20:06:04

标签: javascript functional-programming ramda.js

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

查看R.filter_.filter似乎只传递对象而不是属性。例如,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过滤对象的属性?

2 个答案:

答案 0 :(得分:4)

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

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

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

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

答案 1 :(得分:1)

使用pickBy方法,该方法允许您根据键过滤集合。

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