でRamdas「propSatisfies」メソッドを使用して:私はこのようなオブジェクトの配列を持つ変数オブジェクトのキー名
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"の少なくとも1つのプロパティが "keysTrue"の1つの要素と等しいすべてのオブジェクトを取得し、等しい場合、プロパティの値は "level"と等しいか+1でなければなりません。
例:
keysTrue = [ "上"、 "中"]
レベル= 2
戻り、AとオブジェクトBオブジェクト、オブジェクトAのratio.midため== = 2、オブジェクトBのratio.up === 3はレベル+1と同じです。
私はRamdaドキュメントを正しく読んでいればRamda 'propSatisfied'メソッド(参照:Ramda docs - propSatisfiedを参照)で可能でなければなりませんが、変数値で述語を使用する方法はわかりません。あなたの助けのための
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;
}
ありがとう:
ここRAMDAせずに私はむしろ非効率的なバージョンです!
マフ
うわー、ありがとう!私はramdaやpropSatisfies関数の仕組みを完全に理解していないと思います。どのようにして1行目に1つの引数を、2行目に2つの引数を渡すだけですか?ドキュメントでは、propSatisfiesは3つの引数を取ると言います - これはカリングによるものですか? – Raggamuffin
正確に。 Ramdaのすべての関数は自動的にカリングされるので、このインスタンスでは 'propSatisfies'が部分的に適用されます。これは事実上、 'propSatisfies'の最初の呼び出しが、2つのさらなる引数(キーと比率オブジェクト)を必要とする関数をもたらし、2番目の呼び出しがただ1つのさらなる引数を必要とする関数をもたらすことを意味します(それぞれのオブジェクトは'アレイ)。 –
これはとても素敵です!私はこのようなプログラミングの提案を解決する方法を思っています。 – Raggamuffin