使用ramda.js过滤对象数组

时间:2016-09-26 13:21:37

标签: javascript arrays ramda.js

我有一个对象数组。我想过滤它来获取对象,其中任何属性都包含mathing字符串。

如果我的数组是

 var data = [
 {"name: "John",
 "surname": "Smith"},
 {"name": "Peter",
 "surname: "Smithie"}]

我用字符串“Smi”过滤,它应该返回两个项目。如果string是“John”,则只有第一个。

这是我的代码:

var filtered = R.filter(R.where({ x: R.contains("Smi")}))(data);

我收到了错误:

Cannot read property 'indexOf' of undefined

有人可以帮我解决我的Ramda功能吗?我想,我必须要小的东西。提前致谢

2 个答案:

答案 0 :(得分:2)

你可以这样做:

R.filter(R.pipe(R.values, R.any(R.contains('Smi'))))(data)

这是利用contains的未记录的功能,但这意味着可以在列表上工作,而不是字符串。但它 does work

答案 1 :(得分:1)

我无法在Ramda中回答,但如果您想在JS中实现相同的功能,您可以轻松地执行以下操作;

var   data = [{"name": "John", "surname": "Smith"}, {"name": "Peter", "surname": "Smirnof"}],
getObjects = (d,f) => d.filter(o => Object.keys(o).some(k => o[k].includes(f)));
console.log(getObjects(data,"Smi"));
console.log(getObjects(data,"Jo"));