我有一个这样的对象数组:
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;
}
谢谢你的帮助!
莫夫