【问题标题】:Filtering object array with ramda.js使用 ramda.js 过滤对象数组
【发布时间】:2016-09-27 03:19:12
【问题描述】:

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

如果我的数组是

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

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

这是我的代码:

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

我得到了错误:

Cannot read property 'indexOf' of undefined

有人可以帮我解决我的 Ramda 功能吗?一定是我想念的小东西,我猜。提前致谢

【问题讨论】:

  • 这种方法的问题是在where({x: contains('Smi')})中,x没有意义。 Ramda 不包含这样的“用于任何键”的概念。

标签: javascript arrays ramda.js


【解决方案1】:

你可以这样做:

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

不过,这利用了 contains 的一个未记录的特性,它适用于列表,而不是字符串。但它does work

【讨论】:

    【解决方案2】:

    我无法在 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"));

    【讨论】:

    • 就像没有 Rambda 的解决方案一样,它并没有明显更大。
    猜你喜欢
    • 1970-01-01
    • 2023-01-02
    • 2021-10-21
    • 2018-08-22
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-26
    相关资源
    最近更新 更多