質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

586閲覧

連想配列内の配列(対象 )から 配列(条件)で絞り込みをしたいです。

kero16

総合スコア9

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2021/04/08 07:13

前提・実現したいこと

一覧から、該当する条件のアイテムすべてを抽出したいです。

条件が配列でない場合は下記のコードで抽出できたのですが、
配列にした場合が抽出できず、ご教授いただければ幸いです。
何卒よろしくお願いいたします。

該当のソースコード

js

1var items = [{ 2 "id":1, 3 "name":"ガーベラ", 4 "tags":["ピンク", "通年"] 5}, 6{ 7 "id":2, 8 "name":"バラ", 9 "tags":["レッド", "通年"] 10}, 11{ 12 "id":3, 13 "name":"ひまわり", 14 "tags":["イエロー", "夏"] 15} 16] 17 18// 配列(検索ワード) 19var target = ["レッド", "通年"] 20//( var target = "レッド" では抽出できました) 21 22var result = items.filter(green => { 23 return green.tags.indexOf(this.target) !== -1 24}) 25 26 27console.log(result); 28// [object Array] (0) 29//[]

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

マッチするものがあるかどうか、なので some などでチェックすれば良いと思います。

js

1// 配列になったことを示すために、複数形を使うことをおすすめします。 2const targets = ["レッド", "通年"] 3 4const result = items.filter( (item) => 5 targets.some( (target) => item.tags.includes(target) ) 6)

投稿2021/04/08 07:40

mather

総合スコア6759

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kero16

2021/04/08 09:33

ありがとうございます! ! someというメソッドでcheckできるのですね。 また、条件の複数形も指摘してくださってありがとうございます。
guest

0

ベストアンサー

tagstargetも複数なので、突合方法が少し複雑になります。
tagsfindを使ってtargetの中に一致するものが1件でもあればOKとするようにしました。

js

1var items = [{ 2 "id":1, 3 "name":"ガーベラ", 4 "tags":["ピンク", "通年"] 5}, 6{ 7 "id":2, 8 "name":"バラ", 9 "tags":["レッド", "通年"] 10}, 11{ 12 "id":3, 13 "name":"ひまわり", 14 "tags":["イエロー", "夏"] 15} 16] 17 18// 配列(検索ワード) 19var target = ["レッド", "通年"] 20//( var target = "レッド" では抽出できました) 21 22var result = items.filter(green => { 23 return green.tags.find((tag) => target.indexOf(tag) !== -1) 24}) 25 26 27console.log(result);
[ { id: 1, name: 'ガーベラ', tags: [ 'ピンク', '通年' ] }, { id: 2, name: 'バラ', tags: [ 'レッド', '通年' ] } ]

投稿2021/04/08 07:17

nekoniki

総合スコア2411

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kero16

2021/04/08 07:36

findを使えば、配列と配列を照らし合わせることができるのですね。 ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問