gpt4 book ai didi

ramda.js - Ramda,用 or 条件过滤

转载 作者:行者123 更新时间:2023-12-02 09:07:16 28 4
gpt4 key购买 nike

let arr = [
{
name: 'Anna',
q: {
name: 'Jane'
}
}
];

const getName = R.prop('name');
const getQname = R.path(['q','name']);

这两个函数中的任何一个都可以通过的过滤器。

类似于:

export const filterByName = (name) => 
R.filter(
R.or(
R.propEq(getName, name),
R.propEq(getQname, name)
)
)

不工作。如何在 R.filter 中组合这两个函数?

最佳答案

使用 R.either 和 R.propEq 作为 name 以及来自 q.name 的 R.pathEq:

const filterByName = (name) =>
R.filter(
R.either(
R.propEq('name', name),
R.pathEq(['q', 'name'], name)
)
)

const arr = [{"name":"Anna","q":{"name":"Jane"}},{"name":"Smite","q":{"name":"Jane"}},{"name":"Another","q":{"name":"One"}}];

console.log(filterByName('Anna')(arr))
console.log(filterByName('Jane')(arr))
console.log(filterByName('XXX')(arr))
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.js"></script>

如果您想使用外部函数来提取值,可以使用 R.pipe。使用 R.juxt 提取所有属性值,然后使用 R.any 和 R.equal 检查是否相等。

const getName = R.prop('name');
const getQname = R.path(['q','name']);

const filterByName = (name) =>
R.filter(
R.pipe(
R.juxt([getName, getQname]), // get all names
R.any(R.equals(name)) // check if any of the equals to name
)
)

const arr = [{"name":"Anna","q":{"name":"Jane"}},{"name":"Smite","q":{"name":"Jane"}},{"name":"Another","q":{"name":"One"}}];

console.log(filterByName('Anna')(arr))
console.log(filterByName('Jane')(arr))
console.log(filterByName('XXX')(arr))
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.js"></script>

关于ramda.js - Ramda,用 or 条件过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56618580/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com