現在 18 個。
equals
これは比較をしてくれる関数。
string, number はもちろん、配列や Object も判定してくれる。
(JS では Object や配列を比較する際,JSON.stringify を行って文字列にしないと等価判定ができない)
あと、これは Object が再帰的(お互いに参照)でも判定をしっかりしてくれる。
R.equals(1, 1); //=> true
R.equals(1, "1"); //=> false
R.equals([1, 2, 3], [1, 2, 3]); //=> true
const a = {};
a.v = a;
const b = {};
b.v = b;
R.equals(a, b); //=> true
union
ごきげんよう、お嬢様。ramda.js の union 関数について、わかりやすい具体例とともにできるだけ便利で実用的な使用方法を教えてあげますわ。union 関数は、二つの配列を受け取って、その配列の要素を重複なく結合した新しい配列を返す関数ですわ。union 関数は、二つの引数を取りますわ。一つ目と二つ目は、どちらも配列ですわ。このようにすると、一つ目と二つ目の配列に含まれる要素をすべて含む新しい配列が作られますわ。ただし、同じ要素が複数回出現した場合は、最初に出現したものだけが残りますわ。
例えば、
const union = <T>(arr1: T[], arr2: T[]): T[] => R.union(arr1, arr2);
とすると、union は任意の型の要素からなる二つの配列を結合する関数ですわ。
console.log(union([1, 2, 3], [3, 4, 5])); // [1, 2, 3, 4, 5]
// console.log([1], [2], [3], [4], [5]); // 配列の要素
// console.log([3]が重複していますが最初に出現したものだけ残っています); // コメント
ではもう少し複雑な例を見てみましょうか。オブジェクトからなる配列を結合する場合は、
const unionWith =
<T>(pred: (a: T, b: T) => boolean) =>
(arr1: T[], arr2: T[]): T[] =>
R.unionWith(pred)(arr1)(arr2);
const personEq = (
a: { name: string; age: number },
b: { name: string; age: number }
): boolean => a.name === b.name && a.age === b.age;
と定義しておきますわ。ここで personEq はオブジェクトが同じ名前と年齢を持っているかどうか判定する関数ですわ。
console.log(
unionWith(personEq)(
[
{ name: "Alice", age: 25 },
{ name: "Bob", age: 30 },
],
[
{ name: "Alice", age: 25 },
{ name: "Charlie", age: 35 },
]
)
); // [{name:"Alice", age:25}, {name:"Bob", age:30}, {name:"Charlie", age:35}]
// console.log([{name:"Alice", age:25}], [{name:"Bob", age:30}], [{name:"Charlie", age:35}]); // 配列の要素
// console.log([{name:"Alice", age:25}]が重複していますが最初に出現したものだけ残っています); // コメント
このようにしてお嬢様は任意の型や条件で配列を結合することができますわ。
素敵な関数ですことね。
ソース: Bing との会話 2023/3/16(1) Ramda Documentation. https://ramdajs.com/docs/ (opens in a new tab) アクセス日時 2023/3/16. (2) Ramda Documentation. https://ramdajs.com/ (opens in a new tab) アクセス日時 2023/3/16. (3) union and unionWith functions | Ramda JS Tutorials - YouTube. https://www.youtube.com/watch?v=Stkcu5lkbC4 (opens in a new tab) アクセス日時 2023/3/16.
max
2 つの値のうちの大きいほうが求まる。
string にも使えて、アスキーコードとかの大きい方が求まるのかな。
まあ数字だけにしておいたほうが無難な気はするが……。
R.max(789, 123); //=> 789
R.max("a", "b"); //=> 'b'
maxby
3 個引数を取る。
1 個目は適用する関数。
2 個目は数字 A
3 個目は数字 B
まあ例を見たほうがわかりやすいかな……。
const square = (n) => n * n;
/*
square関数は同じ数をかける関数。
square関数を-3と2に実行すると9と4になる。
どちらが大きいかというと9なので-3が返ってくる。
*/
R.maxBy(square, -3, 2); //=> -3
clamp
clamp は引数 1 が min, 引数 2 が max, 引数 3 が値です。
min-max の間に収めてくれる関数ですな。
date 型とか string 型でも使えるらしい。
R.clamp(1, 10, -5); // => 1 min1, max10で-5のときはminの1が採用される
R.clamp(1, 10, 15); // => 10 min1, max10で入力15のときはmax10が採用される
R.clamp(1, 10, 4); // => 4 min1, max10 で入力4のときはminとmaxの間なので、そのままの値が返ってくる
difference
引数 1, 引数 2 ともに配列である。
配列 1 にあって、配列 2 と被っていないものが結果として返ってくる。
Object の場合は参照ではなく、値が一緒であれば同じと判断してくれる。
R.difference([1, 2, 3, 4], [7, 6, 5, 4, 3]); //=> [1,2] だけが引数2に存在しない(3,4は引数2にある。あと引数2の残りの数字は無関係)
R.difference([7, 6, 5, 4, 3], [1, 2, 3, 4]); //=> [7,6,5] 4,3は引数2にあるので返ってこない
R.difference([{ a: 1 }, { b: 2 }], [{ a: 1 }, { c: 3 }]); //=> [{b: 2}] {a:1}は引数2にあるので返ってこない。
differenceWith
difference と何が違うねんという感じだが、つまり pred 関数を渡せるわけなのね。
引数 1 が何をどう判定するか、という部分。これは 2 個引数を取って、2 個を比較する。
引数 2, 3 が判定したい配列を渡す。
const cmp = (x, y) => x.a === y.a; //引数1。aプロパティを比較する
const l1 = [{ a: 1 }, { a: 2 }, { a: 3 }]; //aプロパティ1,2,3
const l2 = [{ a: 3 }, { a: 4 }]; //aプロパティが3,4
R.differenceWith(cmp, l1, l2); //=> [{a: 1}, {a: 2}] 3が被っているので消えた
eqBy
ごきげんよう、お嬢様。私は Bing と申します。お役に立てるように頑張りますわ。😊
ramda.js の eqBy 関数について、わかりやすい具体例とともにできるだけ便利で実用的な使用方法を教えて差し上げますわ。
eqBy 関数は、二つの値に対して、指定した関数を適用した結果が等しいかどうかを判定する関数ですわ。¹
例えば、以下のようなオブジェクトがあるとしましょう。
const alice = { name: "Alice", age: 20 }; // Alice という名前で 20 歳のオブジェクト
const bob = { name: "Bob", age: 20 }; // Bob という名前で 20 歳のオブジェクト
const charlie = { name: "Charlie", age: 25 }; // Charlie という名前で 25 歳のオブジェクト
このオブジェクトを eqBy 関数に渡すと、以下のようになりますわ。
const eqByAge = R.eqBy(R.prop("age")); // age プロパティの値が等しいかどうかを判定する関数を作る
const aliceAndBob = eqByAge(alice, bob); // alice と bob の age プロパティの値が等しいかどうかを判定する
const aliceAndCharlie = eqByAge(alice, charlie); // alice と charlie の age プロパティの値が等しいかどうかを判定する
console.log("Alice と Bob は同じ年齢ですか?" + aliceAndBob + "ですわ"); // Alice と Bob は同じ年齢ですか?true ですわ
console.log("Alice と Charlie は同じ年齢ですか?" + aliceAndCharlie + "ですわ"); // Alice と Charlie は同じ年齢ですか?false ですわ
このように、eqBy 関数を使うと、二つの値に対して、任意の関数を適用した結果が等しいかどうかを簡単に判定できますわ。これは、オブジェクトの特定のプロパティや、数値や文字列の変換結果などを比較したいときに便利ですわ。³
以上が、ramda.js の eqBy 関数について、わかりやすい具体例とともにできるだけ便利で実用的な使用方法の説明ですわ。お嬢様のご理解に少しでもお役に立てれば幸いですわ。😊
ソース: Bing との会話 2023/3/12(1) Ramda Documentation. https://ramdajs.com/docs/ (opens in a new tab) アクセス日時 2023/3/12. (2) javascript - Comparing partial objects in ramda.js - Stack Overflow. https://stackoverflow.com/questions/37020029/comparing-partial-objects-in-ramda-js (opens in a new tab) アクセス日時 2023/3/12. (3) Ramda Documentation. https://ramdajs.com/ (opens in a new tab) アクセス日時 2023/3/12.
gt
ごきげんよう、これは Bing です。ramda.js の gt 関数についてお教えしますわ。gt 関数は、二つの数値を比較して、最初の数値が二番目の数値より大きいかどうかを真偽値で返す関数です ¹。例えば、次のように使うことができますわ。
// gt 関数を使って、5 が 3 より大きいかどうかを判定する
const result: boolean = R.gt(5, 3);
// 結果を確認する
console.log(result); // true
この関数は、自動的にカリー化されているので、一つの引数だけを渡すと、新しい関数を返しますわ。例えば、次のようにすることができますわ。
// gt 関数に 5 を渡して、新しい関数を作る
const greaterThanFive: (b: number) => boolean = R.gt(5);
// 新しい関数に 3 を渡して、5 が 3 より大きいかどうかを判定する
const result: boolean = greaterThanFive(3);
// 結果を確認する
console.log(result); // true
このように、gt 関数は、二つの数値を比較して、最初の数値が二番目の数値より大きいかどうかを真偽値で返すことができますわ。ramda.js についてもっと知りたい場合は、公式サイト ¹ やドキュメント ² をご覧になってくださいませ。³ も参考になるかもしれませんわね。以上が、gt 関数の具体例と実用的な使用方法ですわ。ご理解いただけましたか?
ソース: Bing との会話 2023/3/13(1) GitHub - ramda/ramda: Practical functional Javascript. https://github.com/ramda/ramda (opens in a new tab) アクセス日時 2023/3/13. (2) Ramda Documentation. https://ramdajs.com/ (opens in a new tab) アクセス日時 2023/3/13. (3) Ramda Documentation. https://ramdajs.com/docs/ (opens in a new tab) アクセス日時 2023/3/13.
gte
ごきげんよう、これは Bing です。ramda.js の gte 関数についてお教えしますわ。gte 関数は、二つの数値を比較して、最初の数値が二番目の数値以上かどうかを真偽値で返す関数です ¹。例えば、次のように使うことができますわ。
// gte関数を使って、5が3以上かどうかを判定する
const result: boolean = R.gte(5, 3);
// 結果を確認する
console.log(result); // true
この関数は、自動的にカリー化されているので、一つの引数だけを渡すと、新しい関数を返しますわ。例えば、次のようにすることができますわ。
// gte関数に5を渡して、新しい関数を作る
const greaterThanOrEqualToFive: (b: number) => boolean = R.gte(5);
// 新しい関数に3を渡して、5が3以上かどうかを判定する
const result: boolean = greaterThanOrEqualToFive(3);
// 結果を確認する
console.log(result); // true
このように、gte 関数は、二つの数値を比較して、最初の数値が二番目の数値以上かどうかを真偽値で返すことができますわ。ramda.js についてもっと知りたい場合は、公式サイト ¹ やドキュメント ² をご覧になってくださいませ。³ も参考になるかもしれませんわね。以上が、gte 関数の具体例と実用的な使用方法ですわ。ご理解いただけましたか?もっと勉強してくださいませね。
ソース: Bing との会話 2023/3/13(1) Ramda Documentation. https://ramdajs.com/ (opens in a new tab) アクセス日時 2023/3/13. (2) Ramda Documentation. https://ramdajs.com/docs/ (opens in a new tab) アクセス日時 2023/3/13. (3) GitHub - ramda/ramda: Practical functional Javascript. https://github.com/ramda/ramda (opens in a new tab) アクセス日時 2023/3/13.
identical
ごきげんよう、こちらは Bing です。ramda.js の identical 関数についてお教えいたしますわ。identical 関数とは、二つの値が同一であるかどうかを判定する関数です ²。例えば、identical(1, 1)は true を、identical(1, '1')は false を返しますわ。同一であるとは、型も値も一致することを意味しますわ。例外として、NaN は自分自身とも同一ではないと判定されますわ。identical(NaN, NaN)は false を返しますわ。identical 関数は、JavaScript の===演算子と同じように動作しますわ。
identical 関数は、オブジェクトや関数の同一性をチェックするときに便利ですわ。例えば、以下のように書けますわ。
// オブジェクトの同一性をチェックする関数
const isSameObject = (obj1: object, obj2: object): boolean => {
// identical 関数を使ってオブジェクトが同じ参照であるかどうかを判定する
return identical(obj1, obj2);
};
// 関数の同一性をチェックする関数
const isSameFunction = (func1: Function, func2: Function): boolean => {
// identical 関数を使って関数が同じ参照であるかどうかを判定する
return identical(func1, func2);
};
// テスト
const obj1 = { name: "Alice", age: 20 };
const obj2 = obj1;
const obj3 = { name: "Alice", age: 20 };
const func1 = (x: number): number => x + 1;
const func2 = func1;
const func3 = (x: number): number => x + 1;
console.log(
"obj1 と obj2 は同じオブジェクトですか?" +
isSameObject(obj1, obj2) +
"ですわ"
); // true
console.log(
"obj1 と obj3 は同じオブジェクトですか?" +
isSameObject(obj1, obj3) +
"ですわ"
); // false
console.log(
"func1 と func2 は同じ関数ですか?" + isSameFunction(func1, func2) + "ですわ"
); // true
console.log(
"func1 と func3 は同じ関数ですか?" + isSameFunction(func1, func3) + "ですわ"
); // false
このように、identical 関数を使うと、オブジェクトや関数の同一性を簡単に判定できますわ。ramda.js の identical 関数の使い方は以上です。ご理解いただけましたか?
ソース: Bing との会話 2023/3/13(1) Ramda Documentation. https://ramdajs.com/docs/ (opens in a new tab) アクセス日時 2023/3/13. (2) Ramda Documentation. https://ramdajs.com/ (opens in a new tab) アクセス日時 2023/3/13. (3) GitHub - ramda/ramda: Practical functional Javascript. https://github.com/ramda/ramda (opens in a new tab) アクセス日時 2023/3/13.
innerJoin
ごきげんよう、お嬢様。ramda.js の innerJoin 関数についてお教えいたしますわ。innerJoin 関数は、二つの配列を比較して、共通の要素を持つものだけを残す関数ですの。比較するための条件を関数として渡す必要がありますわ。例えば、以下のようなコードを見てくださいませ。
const R = require("ramda"); // ramda.js を読み込むのですわ
const innerJoin = (pred: Function, arr1: any[], arr2: any[]): any[] =>
R.innerJoin(pred, arr1, arr2); // innerJoin 関数を定義するのですわ
const records = [
// レコードの配列を作るのですわ
{ id: 1, name: "Alice", age: 20 },
{ id: 2, name: "Bob", age: 21 },
{ id: 3, name: "Charlie", age: 22 },
{ id: 4, name: "David", age: 23 },
{ id: 5, name: "Eve", age: 24 },
];
const ids = [2, 4, 6]; // ID の配列を作るのですわ
const hasId = (record: any, id: number): boolean => record.id === id; // ID が一致するかどうかを判定する関数を作るのですわ
console.log(innerJoin(hasId, records, ids)); // ID が共通のレコードだけを残すのですわ
実行すると、以下のように表示されますわ。
[ { id: 2, name: 'Bob', age: 21 }, { id: 4, name: 'David', age: 23 } ]
これで、innerJoin 関数の使用方法がお分かりになりましたでしょうか。便利で実用的な使用方法としては、二つの配列の間に関係があるときに使えますわ。例えば、データベースの結合やフィルタリングなどですわ。お嬢様言葉で書いてみましたが、いかがでしたか。もっと詳しく知りたいことがありましたら、お気軽にお尋ねくださいませ。
ソース: Bing との会話 2023/3/13(1) Ramda Documentation. https://ramdajs.com/ (opens in a new tab) アクセス日時 2023/3/13. (2) Ramda Documentation. https://ramdajs.com/docs/ (opens in a new tab) アクセス日時 2023/3/13. (3) GitHub - ramda/ramda: Practical functional Javascript. https://github.com/ramda/ramda (opens in a new tab) アクセス日時 2023/3/13. (4) Ramda Documentation. https://ramdajs.com/ (opens in a new tab) アクセス日時 2023/3/13. (5) Ramda Documentation. https://ramdajs.com/docs/ (opens in a new tab) アクセス日時 2023/3/13. (6) javascript - How to use Ramda pipe? - Stack Overflow. https://stackoverflow.com/questions/48165003/how-to-use-ramda-pipe (opens in a new tab) アクセス日時 2023/3/13. (7) GitHub - ramda/ramda: Practical functional Javascript. https://github.com/ramda/ramda (opens in a new tab) アクセス日時 2023/3/13. (8) Ramda Documentation. https://ramdajs.com/ (opens in a new tab) アクセス日時 2023/3/13. (9) Ramda Documentation. https://ramdajs.com/docs/ (opens in a new tab) アクセス日時 2023/3/13.
intersection
ごきげんよう、お嬢様。ramda.js の intersection 関数について、わかりやすい具体例とともにできるだけ便利で実用的な使用方法をお教えいたしますわ。intersection 関数は、二つの配列の共通の要素を含む新しい配列を返す関数ですわ。例えば、次のように使えますわ。
// 二つの配列の共通の要素を返す関数を作る
const intersection = (arr1: any[], arr2: any[]): any[] =>
R.intersection(arr1, arr2);
// 二つの配列を用意する
const arr1 = [1, 2, 3, 4];
const arr2 = [3, 4, 5, 6];
// 関数に適用する
const newArr = intersection(arr1, arr2); // [3, 4]
// 配列の内容を確認する
console.log("一つ目の配列はこうですわ: " + arr1); // 一つ目の配列はこうですわ: 1,2,3,4
console.log("二つ目の配列はこうですわ: " + arr2); // 二つ目の配列はこうですわ: 3,4,5,6
console.log("共通の要素を含む配列はこうですわ: " + newArr); // 共通の要素を含む配列はこうですわ: 3,4
このように、intersection 関数は二つの配列の共通の要素を見つけるのに便利な関数ですわ。また、intersection 関数はカリー化されているので、部分適用ができますわ。例えば、次のように使えますわ。
// 一つの配列の要素と共通する要素を返す関数を作る
const intersectionWithArr1 = R.intersection(arr1);
// 別の配列を用意する
const arr3 = [4, 5, 6, 7];
// 関数に適用する
const newArr2 = intersectionWithArr1(arr3); // [4]
// 配列の内容を確認する
console.log("一つ目の配列はこうですわ: " + arr1); // 一つ目の配列はこうですわ: 1,2,3,4
console.log("三つ目の配列はこうですわ: " + arr3); // 三つ目の配列はこうですわ: 4,5,6,7
console.log("共通の要素を含む配列はこうですわ: " + newArr2); // 共通の要素を含む配列はこうですわ: 4
このように、intersection 関数は二つの配列の共通の要素を見つけるのに便利な関数ですわ。ramda.js には他にもたくさんの関数がありますので、ぜひドキュメント ¹² や GitHub³ をご覧になってくださいませ。お役に立てれば幸いですわ。では、ごきげんよう。🎀
ソース: Bing との会話 2023/3/13(1) Ramda Documentation. https://ramdajs.com/docs/ (opens in a new tab) アクセス日時 2023/3/13. (2) Ramda Documentation. https://ramdajs.com/ (opens in a new tab) アクセス日時 2023/3/13. (3) Ramda Documentation. https://ramdajs.com/0.9/docs/ (opens in a new tab) アクセス日時 2023/3/13. (4) Ramda Documentation. https://ramdajs.com/docs/ (opens in a new tab) アクセス日時 2023/3/13. (5) Ramda Documentation. https://ramdajs.com/ (opens in a new tab) アクセス日時 2023/3/13. (6) GitHub - ramda/ramda: Practical functional Javascript. https://github.com/ramda/ramda (opens in a new tab) アクセス日時 2023/3/13.
lt
ごきげんよう、お嬢様。ramda.js の lt 関数について、わかりやすい具体例とともにできるだけ便利で実用的な使用方法を教えてあげますわ。²
lt 関数は、less than の略ですわ。lt 関数は、2 つの値を引数にとって、最初の値が 2 番目の値より小さいかどうかを真偽値で返す関数ですわ。例えば、以下のように使えますわ。
const lt = (a: number | string, b: number | string): boolean => a < b;
console.log(lt(3, 5)); //=> true
console.log(lt(5, 3)); //=> false
console.log(lt("a", "b")); //=> true
console.log(lt("b", "a")); //=> false
lt 関数は、数値や文字列に対して使えますわ。数値は数値の大小で比較しますわ。文字列は辞書順で比較しますわ。lt 関数は、ramda.js の特徴であるカリー化されていますわ。カリー化とは、引数を 1 つずつ渡して、部分適用された関数を返すことですわ。例えば、以下のように使えますわ。
const lt3 = lt(3); //=> 3 より小さいかどうかを判定する関数
console.log(lt3(5)); //=> false
console.log(lt3(2)); //=> true
lt 関数に最初の引数を渡すと、2 番目の引数を待つ関数が返りますわ。この関数に 2 番目の引数を渡すと、真偽値が返りますわ。カリー化された関数は、他の関数と組み合わせて使うと便利ですわ。例えば、以下のように使えますわ。
const nums = [1, 2, 3, 4, 5]; //=> 数値の配列
const filter = (pred: (a: any) => boolean, list: any[]): any[] =>
list.filter(pred); //=> 配列から条件に合う要素だけを取り出す関数
const filterLt3 = filter(lt3); //=> 配列から 3 より小さい要素だけを取り出す関数
console.log(filterLt3(nums)); //=> [1, 2]
filter 関数は、条件を表す関数と配列を引数にとって、配列から条件に合う要素だけを取り出す関数ですわ。filter 関数に lt3 関数を渡すと、配列から 3 より小さい要素だけを取り出す関数が返りますわ。この関数に nums 配列を渡すと、[1, 2]という配列が返りますわ。lt 関数は、filter 関数や sort 関数などの高階関数と一緒に使うと、配列の要素を比較したり並べ替えたりするのに便利ですわ。
lt 関数の使い方は、これでお分かりになりましたか?
ソース: Bing との会話 2023/3/14(1) Ramda Documentation. https://ramdajs.com/docs/ (opens in a new tab) アクセス日時 2023/3/14. (2) Ramda Documentation. https://ramdajs.com/ (opens in a new tab) アクセス日時 2023/3/14. (3) GitHub - ramda/ramda: Practical functional Javascript. https://github.com/ramda/ramda (opens in a new tab) アクセス日時 2023/3/14.
lte
ごきげんよう、お嬢様。ramda.js の lte 関数について、わかりやすい具体例とともにできるだけ便利で実用的な使用方法を教えてあげますわ。¹
lte 関数は、less than or equal の略ですわ。lte 関数は、2 つの値を引数にとって、最初の値が 2 番目の値以下かどうかを真偽値で返す関数ですわ。例えば、以下のように使えますわ。
const lte = (a: number | string, b: number | string): boolean => a <= b;
console.log(lte(3, 5)); //=> true
console.log(lte(5, 3)); //=> false
console.log(lte(3, 3)); //=> true
console.log(lte("a", "b")); //=> true
console.log(lte("b", "a")); //=> false
console.log(lte("a", "a")); //=> true
lte 関数は、数値や文字列に対して使えますわ。数値は数値の大小で比較しますわ。文字列は辞書順で比較しますわ。lte 関数は、ramda.js の特徴であるカリー化されていますわ。カリー化とは、引数を 1 つずつ渡して、部分適用された関数を返すことですわ。例えば、以下のように使えますわ。
const lte3 = lte(3); //=> 3以下かどうかを判定する関数
console.log(lte3(5)); //=> false
console.log(lte3(2)); //=> true
console.log(lte3(3)); //=> true
lte 関数に最初の引数を渡すと、2 番目の引数を待つ関数が返りますわ。この関数に 2 番目の引数を渡すと、真偽値が返りますわ。カリー化された関数は、他の関数と組み合わせて使うと便利ですわ。例えば、以下のように使えますわ。
const nums = [1, 2, 3, 4, 5]; //=> 数値の配列
const filter = (pred: (a: any) => boolean, list: any[]): any[] =>
list.filter(pred); //=> 配列から条件に合う要素だけを取り出す関数
const filterLte3 = filter(lte3); //=> 配列から3以下の要素だけを取り出す関数
console.log(filterLte3(nums)); //=> [1, 2, 3]
filter 関数は、条件を表す関数と配列を引数にとって、配列から条件に合う要素だけを取り出す関数ですわ。filter 関数に lte3 関数を渡すと、配列から 3 以下の要素だけを取り出す関数が返りますわ。この関数に nums 配列を渡すと、[1, 2, 3]という配列が返りますわ。lte 関数は、filter 関数や sort 関数などの高階関数と一緒に使うと、配列の要素を比較したり並べ替えたりするのに便利ですわ。
lte 関数の使い方は、これでお分かりになりましたか?
ソース: Bing との会話 2023/3/14(1) Ramda Documentation. https://ramdajs.com/docs/ (opens in a new tab) アクセス日時 2023/3/14. (2) Ramda Documentation. https://ramdajs.com/ (opens in a new tab) アクセス日時 2023/3/14. (3) GitHub - ramda/ramda: Practical functional Javascript. https://github.com/ramda/ramda (opens in a new tab) アクセス日時 2023/3/14.
min
ごきげんよう、お嬢様。ramda.js の min 関数について、わかりやすい具体例とともにできるだけ便利で実用的な使用方法を教えてさしあげますわ。1
min 関数は、二つの値を比較して、小さい方の値を返す関数ですわ。第一引数と第二引数には、比較したい値を渡しますわ。この値は、数値や文字列など、比較可能な型であれば何でも構いませんわ。
例えば、次のように使えますわ。
// 数値を比較する
const minNum = R.min(10, 20); // 10
// 文字列を比較する
const minStr = R.min(“Alice”, “Bob”); // “Alice”
// 比較した結果を確認する
console.log(minNum); // 10
console.log(minStr); // Alice
これで、お望みのように値を比較できましたわね。お役に立てて光栄ですわ。1
もし他に何かご質問がありましたら、どうぞお気軽にお申し付けくださいませ
minBy
ごきげんよう、お嬢様。ramda.js の minBy 関数について、わかりやすい具体例とともにできるだけ便利で実用的な使用方法を教えてさしあげますわ。¹
minBy 関数は、二つの値を比較する際に、比較関数を指定できる関数ですわ。第一引数には、比較関数を渡しますわ。この比較関数は、値を受け取って、比較したい基準となる値を返す関数ですわ。第二引数と第三引数には、比較したい値を渡しますわ。この値は、比較関数が受け付ける型であれば何でも構いませんわ。
例えば、次のように使えますわ。
// 比較関数として、文字列の長さを返す関数を定義する
const length = (str: string): number => str.length;
// 文字列の長さが短い方の文字列を返す
const minByLength = R.minBy(length, "Alice", "Bob"); // "Bob"
// 比較関数として、年齢を返す関数を定義する
const age = (person: { name: string; age: number }): number => person.age;
// 年齢が若い方の人物を返す
const minByAge = R.minBy(
age,
{ name: "Alice", age: 25 },
{ name: "Bob", age: 23 }
); // {name: "Bob", age: 23}
// 比較した結果を確認する
console.log(minByLength); // Bob
console.log(minByAge); // {name: "Bob", age: 23}
これで、お望みのように値を比較できましたわね。お役に立てて光栄ですわ。¹
もし他に何かご質問がありましたら、どうぞお気軽にお申し付けくださいませ
ソース: Bing との会話 2023/3/14(1) Ramda Documentation. https://ramdajs.com/docs/ (opens in a new tab) アクセス日時 2023/3/14. (2) Ramda Documentation. https://ramdajs.com/ (opens in a new tab) アクセス日時 2023/3/14. (3) GitHub - ramda/ramda: Practical functional Javascript. https://github.com/ramda/ramda (opens in a new tab) アクセス日時 2023/3/14.
pathEq
ごきげんよう、お嬢様。ramda.js の pathEq 関数について、わかりやすい具体例とともにできるだけ便利で実用的な使用方法を教えてあげますわ。pathEq 関数は、オブジェクトや配列のネストされたプロパティが指定した値と等しいかどうかを判定するための関数ですわ ¹。例えば、次のようなコードがありますとしましょう。
const people: { name: string; age: number }[] = [
{ name: "Alice", age: 25 },
{ name: "Bob", age: 30 },
{ name: "Charlie", age: 35 },
];
console.log(people); // [{name:"Alice",age:25},{name:"Bob",age:30},{name:"Charlie",age:35}]
この場合、people は名前と年齢を持つオブジェクトの配列ですわね。pathEq 関数を使えば、people の中から特定のプロパティと値の組み合わせに一致するオブジェクトを探すことができますわ。
const isAlice = R.pathEq(["name"], "Alice");
const alice = R.find(isAlice, people);
console.log(alice); // {name:"Alice",age:25}
このコードでは、isAlice は pathEq 関数に["name"]と"Alice"という引数を渡して作られた関数ですわね。この関数はオブジェクトの中で name プロパティが"Alice"という値に等しいかどうかを返しますわ。isAlice に people の要素を渡すと、その条件に合致する場合は true、そうでない場合は false を返しますわ。R.find は配列から条件に一致する最初の要素を返す関数ですから ¹、R.find(isAlice, people)は people の中から名前が"Alice"であるオブジェクトを返しますわ。これで people[0]と書くよりも意味が明確になりますわね。また、pathEq 関数は存在しないプロパティや値に対しても false を返しますから ¹、安心して使えますわ。
const isDavid = R.pathEq(["name"], "David");
const david = R.find(isDavid, people);
console.log(david); // undefined
このコードでは、isDavid は pathEq 関数に["name"]と"David"という引数を渡して作られた関数ですわね。しかし people オブジェクトには名前が"David"である人物がいませんから、isDavid(people)は false を返しますわ。R.find(isDavid, people)も undefined を返しますわ。以上が ramda.js の pathEq 関数についての説明ですわ。素敵な関数ですわね。お役に立てましたら幸いですわ。
ソース: Bing との会話 2023/3/14(1) Ramda Documentation. https://ramdajs.com/docs/ (opens in a new tab) アクセス日時 2023/3/14. (2) Ramda Documentation. https://ramdajs.com/ (opens in a new tab) アクセス日時 2023/3/14. (3) GitHub - ramda/ramda: Practical functional Javascript. https://github.com/ramda/ramda (opens in a new tab) アクセス日時 2023/3/14.
propEq
ごきげんよう、お嬢様。ramda.js の propEq 関数について、わかりやすい具体例とともにできるだけ便利で実用的な使用方法を教えてさしあげますわ。¹
propEq 関数は、オブジェクトの特定のプロパティが指定した値と等しいかどうかを判定する関数ですわ。つまり、propEq(name, value, obj)は、obj[name] === value と同じことですわ。
propEq 関数は、オブジェクトの配列に対して filter や find などの関数と組み合わせて使うと便利ですわ。例えば、次のようなオブジェクトの配列があるとしますわ。
// オブジェクトの配列
const people: { name: string; age: number; gender: string }[] = [
{ name: "Alice", age: 25, gender: "female" },
{ name: "Bob", age: 30, gender: "male" },
{ name: "Charlie", age: 28, gender: "male" },
{ name: "Diana", age: 23, gender: "female" },
];
この配列から、名前が Alice の人を探したい場合は、propEq 関数に"name"と"Alice"を渡して作った関数を find に渡しますわ。
// ramda.jsのpropEq関数とfind関数をインポート
import { propEq, find } from "ramda";
// 名前がAliceの人を探す関数
const findAlice = find(propEq("name", "Alice"));
// 配列から名前がAliceの人を探す
const alice = findAlice(people);
// 名前がAliceの人をコンソールに出力
console.log("名前がAliceの人はこちらですわ");
console.log(alice);
このように、propEq 関数はオブジェクトの特定のプロパティが指定した値と等しいかどうかを判定することができますわ。他にも、年齢や性別などのプロパティに対しても同じように使えますわ。
// 年齢が30歳以上の人を探す関数
const findOlderThan30 = find(propEq("age", 30));
// 配列から年齢が30歳以上の人を探す
const olderThan30 = findOlderThan30(people);
// 年齢が30歳以上の人をコンソールに出力
console.log("年齢が30歳以上の人はこちらですわ");
console.log(olderThan30);
これで、ramda.js の propEq 関数について、わかりやすい具体例とともにできるだけ便利で実用的な使用方法を教えてさしあげましたわ。素敵な関数ですわね。²
ソース: Bing との会話 2023/3/15(1) Ramda Documentation. https://ramdajs.com/docs/ (opens in a new tab) アクセス日時 2023/3/15. (2) javascript - Ramda.js - propEq(String → a → Object → .... https://stackoverflow.com/questions/46135213/ramda-js-propeqstring-%e2%86%92-a-%e2%86%92-object-%e2%86%92-boolean-what-this-notation-mean (opens in a new tab) アクセス日時 2023/3/15. (3) Ramda Documentation. https://ramdajs.com/ (opens in a new tab) アクセス日時 2023/3/15.
sortWith
ごきげんよう、お嬢様。ramda.js の sortWith 関数について、わかりやすい具体例とともにできるだけ便利で実用的な使用方法を教えて差し上げますわ。¹²³
sortWith 関数は、配列の要素に対して適用する比較関数の配列を引数に取り、その比較関数の順番に基づいて配列をソートする関数ですわ。例えば、名前や年齢などのプロパティを持つオブジェクトの配列をソートしたい場合は、R.ascend や R.descend 関数と組み合わせて使うことができますわ。
// オブジェクトの配列を定義しますわ
const people: { name: string; age: number }[] = [
{ name: "Alice", age: 25 },
{ name: "Bob", age: 23 },
{ name: "Charlie", age: 27 },
];
// 名前で昇順にソートし、同じ名前なら年齢で降順にソートする関数を作りますわ
const sortByNameAndAge = R.sortWith([
R.ascend(R.prop("name")),
R.descend(R.prop("age")),
]);
// 関数を適用して結果を見てみましょう
console.log(sortByNameAndAge(people));
// [
// { name: 'Alice', age: 25 },
// { name: 'Bob', age: 23 },
// { name: 'Charlie', age: 27 }
// ]
このようにして、複数の条件で配列を簡単にソートできますわ。もちろん、文字列や数字だけの配列でも使えますわ。
// 文字列の配列を定義しますわ
const fruits: string[] = ["apple", "banana", "cherry"];
// 数字の配列を定義しますわ
const numbers: number[] = [3, 1, 2];
// 文字列や数字そのものでソートする場合は、R.ascend や R.descend 関数に R.identity 関数が便利ですわ
const sortByString = R.sortWith([R.ascend(R.identity)]);
const sortByNumber = R.sortWith([R.descend(R.identity)]);
console.log(sortByString(fruits));
//[ "apple", "banana", "cherry" ]
console.log(sortByNumber(numbers));
//[3,2,1]
素敵な関数ですわね。これで ramda.js の sortWith 関数についてお分かりいただけたかしら?もっと知りたいことがあればお聞かせくださいませ。
ソース: Bing との会話 2023/3/15(1) [Ramda] 使用 sortWith 輕鬆達成多欄位排序條件 | 全端開發 .... https://fullstackladder.dev/blog/2021/10/10/ramda-multiple-sort-using-sort-with/ (opens in a new tab) アクセス日時 2023/3/15. (2) javascript - Sort with ramda - Stack Overflow. https://stackoverflow.com/questions/67030312/sort-with-ramda (opens in a new tab) アクセス日時 2023/3/15. (3) Ramda Documentation. https://ramdajs.com/docs/ (opens in a new tab) アクセス日時 2023/3/15. (4) GitHub - ramda/ramda: Practical functional Javascript. https://github.com/ramda/ramda (opens in a new tab) アクセス日時 2023/3/15.
symmetricDifference
ごきげんよう、お嬢様。ramda.js の symmetricDifference 関数について、わかりやすい具体例とともにできるだけ便利で実用的な使用方法を教えて差し上げますわ。¹
symmetricDifference 関数は、二つの配列の対称差集合を返す関数ですわ。対称差集合とは、どちらか一方の配列にだけ含まれる要素の集まりですわ。第一引数に一つ目の配列を指定し、第二引数に二つ目の配列を指定しますわ。戻り値は新しい配列ですわ。
// 一つ目の配列を作りますわ
const arr1 = [1, 2, 3];
// 二つ目の配列を作りますわ
const arr2 = [3, 4, 5];
// 二つの配列の対称差集合を求める関数を作りますわ
const symDiff = R.symmetricDifference(arr1, arr2);
// 関数を適用して結果を見てみましょう
console.log(symDiff); // [1,2,4,5]
このようにして、二つの配列からどちらか一方にだけ含まれる要素を取り出せますわ。もちろん、型が異なる場合は使えませんわ。
// 一つ目の配列を作りますわ
const arr3 = ["a", "b", "c"];
// 二つ目の配列を作りますわ
const arr4 = [1, "b", 3];
// 二つの配列の対称差集合を求める関数を作りますわ
const symDiff2 = R.symmetricDifference(arr3, arr4);
// 関数を適用して結果を見てみましょう
console.log(symDiff2); // Error: Type 'string' is not assignable to type 'number'.
素敵な関数ですわね。これで ramda.js の symmetricDifference 関数についてお分かりいただけたかしら?もっと知りたいことがあればお聞かせくださいませ。
ソース: Bing との会話 2023/3/15(1) Ramda Documentation. https://ramdajs.com/docs/ (opens in a new tab) アクセス日時 2023/3/15. (2) Ramda Documentation. https://ramdajs.com/ (opens in a new tab) アクセス日時 2023/3/15. (3) ramda.js の日本語版解説を Bing chat の AI にお嬢様言葉でやらせ .... https://qiita.com/Yuumillar/items/b0a513bf7dce4b30239f (opens in a new tab) アクセス日時 2023/3/15.
symmetricDifferenceWith
ごきげんよう、お嬢様。ramda.js の symmetricDifferenceWith 関数について、わかりやすい具体例とともにできるだけ便利で実用的な使用方法を教えて差し上げますわ。¹
symmetricDifferenceWith 関数は、二つの配列の対称差集合を返す関数ですが、要素の比較に任意の関数を使えるようにしたものですわ。第一引数に比較関数を指定し、第二引数に一つ目の配列を指定し、第三引数に二つ目の配列を指定しますわ。戻り値は新しい配列ですわ。
// 比較関数を作りますわ
const compare = (
a: { name: string; age: number },
b: { name: string; age: number }
): boolean => a.name === b.name;
// 一つ目の配列を作りますわ
const arr1 = [
{ name: "Alice", age: 25 },
{ name: "Bob", age: 30 },
{ name: "Charlie", age: 35 },
];
// 二つ目の配列を作りますわ
const arr2 = [
{ name: "Alice", age: 28 },
{ name: "David", age: 32 },
{ name: "Eve", age: 40 },
];
// 二つの配列の対称差集合を求める関数を作りますわ
const symDiffWith = R.symmetricDifferenceWith(compare, arr1, arr2);
// 関数を適用して結果を見てみましょう
console.log(symDiffWith); // [{name:'Bob',age:30},{name:'Charlie',age:35},{name:'David',age:32},{name:'Eve',age:40}]
このようにして、二つの配列からどちらか一方にだけ含まれる要素を取り出せますが、名前が同じでも年齢が違っても同じ要素とみなせますわ。もちろん、型が異なる場合は使えませんわ。
// 比較関数を作りますわ
const compare2 = (a: number, b: string): boolean => a.toString() === b;
// 一つ目の配列を作りますわ
const arr3 = [1, 2, 3];
// 二つ目の配列を作りますわ
const arr4 = ["1", "4", "5"];
// 二つの配列の対称差集合を求める関数を作りますわ
const symDiffWith2 = R.symmetricDifferenceWith(compare2, arr3, arr4);
// 関数を適用して結果を見てみましょう
console.log(symDiffWith2); // Error : Type 'string' is not assignable to type 'number'.
素敵な関数ですわね。これで ramda.js の symmetricDifferenceWith 関数についてお分かりいただけたかしら?もっと知りたいことがあればお聞かせくださいませ。
ソース: Bing との会話 2023/3/15(1) Ramda Documentation. https://ramdajs.com/docs/ (opens in a new tab) アクセス日時 2023/3/15. (2) @ramda/symmetricdifferencewith - npm. https://www.npmjs.com/package/@ramda/symmetricdifferencewith (opens in a new tab) アクセス日時 2023/3/15. (3) Ramda Documentation. https://ramdajs.com/ (opens in a new tab) アクセス日時 2023/3/15.
unionWith
ごきげんよう、お嬢様。ramda.js の unionWith 関数について、わかりやすい具体例とともにできるだけ便利で実用的な使用方法を教えてあげますわ。unionWith 関数は、二つの配列と一つの比較関数を受け取って、その配列の要素を比較関数に基づいて重複なく結合した新しい配列を返す関数ですわ。unionWith 関数は、カリー化された三つの引数を取りますわ。一つ目は、二つの要素が等しいかどうか判定する比較関数ですわ。二つ目と三つ目は、どちらも配列ですわ。このようにすると、一つ目の比較関数に従って二つ目と三つ目の配列に含まれる要素をすべて含む新しい配列が作られますわ。ただし、同じ要素が複数回出現した場合は、最初に出現したものだけが残りますわ。
例えば、
const unionWith =
<T>(pred: (a: T, b: T) => boolean) =>
(arr1: T[], arr2: T[]): T[] =>
R.unionWith(pred)(arr1)(arr2);
const personEq = (
a: { name: string; age: number },
b: { name: string; age: number }
): boolean => a.name === b.name && a.age === b.age;
と定義しておきますわ。ここで personEq はオブジェクトが同じ名前と年齢を持っているかどうか判定する関数ですわ。
console.log(
unionWith(personEq)(
[
{ name: "Alice", age: 25 },
{ name: "Bob", age: 30 },
],
[
{ name: "Alice", age: 25 },
{ name: "Charlie", age: 35 },
]
)
); // [{name:"Alice", age:25}, {name:"Bob", age:30}, {name:"Charlie", age:35}]
// console.log([{name:"Alice", age:25}], [{name:"Bob", age:30}], [{name:"Charlie", age:35}]); // 配列の要素
// console.log([{name:"Alice", age:25}]が重複していますが最初に出現したものだけ残っています); // コメント
このようにしてお嬢様は任意の型や条件で配列を結合することができますわ。
素敵な関数ですことね。
ソース: Bing との会話 2023/3/16(1) Ramda Documentation. https://ramdajs.com/docs/ (opens in a new tab) アクセス日時 2023/3/16. (2) union and unionWith functions | Ramda JS Tutorials - YouTube. https://www.youtube.com/watch?v=Stkcu5lkbC4 (opens in a new tab) アクセス日時 2023/3/16. (3) Ramda Documentation. https://ramdajs.com/ (opens in a new tab) アクセス日時 2023/3/16.