👍
[JavaScript]someメソッドを使って配列をチェックする
やりたいこと
- 特定の商品名がふくまれるかどうかを判定する関数を実装したい
- 特定の商品名は複数指定することができる(配列で持つ)
- 判定対象となる商品は複数ある
- 関数型っぽい書き方を身につけたいのでなるべくfor文を使わずにやりたい。
some()の概要
some() メソッドは、配列の少なくとも一つの要素が、指定された関数で実装されたテストに合格するかどうかをテストします。これはブール値を返します。
arr.some(callback関数)
の形で使う。配列の各要素に対してcallback関数
を実行し、その結果がtrue
になる要素がみつかればtrue
を返すメソッド。
サンプル
- 商品名を渡すと、特定の商品名配列
TARGET_GOODS_NAMES
に渡した商品名が含まれるかどうかを判定してboolean
を返す関数を作成しています。
sample.transform
const TARGET_GOODS_NAMES = [
'鬼滅の刃',
'シャングリラ・フロンティア',
'呪術廻戦',
'無職転生',
'独学大全',
];
const items = [
{ goodsName: '呪術廻戦 1巻' },
{ goodsName: '鬼滅の刃 3巻' },
{ goodsName: '独学' },
{ goodsName: '対象外商品1' },
];
const isTargetItem = (goodsName: string): boolean => {
if (TARGET_GOODS_NAMES.some((word) => goodsName.includes(word))) {
return true;
}
return false;
};
items.forEach((item) => {
console.log(isTargetItem(item.goodsName));
});
実行結果
$ ts-node src/test.ts
true #「呪術廻戦 1巻」には「呪術廻戦」が含まれるのでtrue
true #「鬼滅の刃 3巻」には「鬼滅の刃」が含まれるのでtrue
false #「独学」はTARGET_GOODS_NAMEの中に含まれるものがないのでfalse
false #「対象外商品1」はTARGET_GOODS_NAMEの中に含まれるものがないのでfalse
ポイント
-
TARGET_GOODS_NAMES
から要素を1つずつ取り出す(wordに格納される) - 引数で渡した
goodsName
がword
の中に含まれるかどうかをincludes
を使ってチェック -
goodsName
の中にTARGET_GOODS_NAMES
が含まれるものが1つでもあれば、some()
はtrueを返す ※実行結果コメント参照
Discussion
someとincludesをbennyで見比べてみました。
demo code.
簡単ですが、以上です。