gpt4 book ai didi

javascript - 使用带有可变对象键名的 Ramdas 'propSatisfies' 方法

转载 作者:行者123 更新时间:2023-11-30 12:03:09 25 4
gpt4 key购买 nike

我有一个这样的对象数组:

    array = [{
name: "Object A",
ratio: {
up: 1,
mid: 2,
down: 1
}
},
{
name: "Object B",
ratio: {
up: 3,
mid: 1,
down: 2
}
}];

还有一个像这样的函数:

getGteLevelPerRatio = (list, keysTrue, level) => {...};
// "level" is of type number and can be 1,2 or 3
// "keysTrue" is an array of type String and can be any element of the power set of ["up", "mid", "down"], eg. ["up"] or ["mid", "down"]

有了这个函数,我想得到每个对象,其中“ratio”的至少一个属性等于“keysTrue”的一个元素,如果它们相等,属性的值应该等于或+1到“level” .


示例:

keysTrue = ["上", "中"]

级别 = 2

返回对象A和对象B,因为对象A的ratio.mid === 2,对象B的ratio.up === 3等于level + 1。


如果我正确阅读了 Ramda 文档,这应该可以通过 Ramda 'propSatisfied' 方法(参见:Ramda docs - propSatisfied)实现,但我不知道如何使用具有变量值的谓词。

这是我没有 Ramda 的相当低效的版本:

getGteLevelPerRatio = (list, keysTrue, level) => {
arrayFiltered = [];
array.forEach(entry => {
keysTrue.forEach(keysTrueEntry => {
for (key in entry.ratio) {
if (keysTrueEntry === key) {
if (level <= entry.ratio[key]) || level <= entry.ratio[key]) + 1) {
arrayFiltered.push(entry);
console.log(entry.name + " " + key + ": " + entry.ratio[key]);
}
}
}
return arrayFiltered;
}

感谢您的帮助!

手袋

最佳答案

像下面这样的东西应该做你想做的:

const getGteLevelPerRatio = (list, keysTrue, level) => {
const gteKeysFns = R.map(R.propSatisfies(R.gte(R.__, level)), keysTrue);
return R.filter(R.propSatisfies(R.anyPass(gteKeysFns), 'ratio'), list);
};

第一行映射 keysTrue 列表,创建一个函数列表,如果每个键大于或等于给定的 ,这些函数将返回 true >level(注意,我们在这里使用 R.__ 占位符来部分应用 R.gte 的第二个参数和 level) .

第二行将给定的对象列表过滤为仅那些 ratio 属性满足 gteKeysFns 列表中的任何函数的对象。

关于javascript - 使用带有可变对象键名的 Ramdas 'propSatisfies' 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36099208/

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