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

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

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

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

4回答

1008閲覧

Javascriptで配列が別の配列に含まれているかどうか調べる

naoya7076

総合スコア28

JavaScript

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

1クリップ

投稿2018/01/14 06:29

###実現したいこと

Javascriptである配列1が別の配列2に含まれているかどうかを調べたいです。
例えば
var key1 = [11,12,13]が
var key2 = [11,12,13,14,15,16,17]に含まれているか
(この場合はTrue)

var key1 = [11,12,22]が
var key2 = [11,12,13,14,15,16,17]に含まれているか
(この場合はfalse)
を返すためにはどうすればいいでしょうか?

###試したこと
Array.everyやindexOfなどを使ってみましたがどれも失敗しました

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

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

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

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

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

guest

回答4

0

順番が関係ないのでしたら,

js

1key1.every(key => key2.includes(key));

でもできるかと。

投稿2018/01/14 08:00

turbgraphics200

総合スコア4267

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

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

0

こういうことでしょうか。

JavaScript

1const arr = [11,12,13,14,15,16,17]; 2const tgt = [11,12,13]; 3let res = tgt.every( e => arr.some( a => a === e ) ); 4console.log( res ); 5```**動くサンプル:**[https://jsfiddle.net/tsm4sjmr/](https://jsfiddle.net/tsm4sjmr/)

投稿2018/01/14 07:55

kei344

総合スコア69407

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

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

kei344

2018/01/14 07:55

あ、終わってた。
jun68ykt

2018/01/14 08:01

そのまま丸っと覚えておいてもいいような、every と some のお手本のようなコードですね!
kei344

2018/01/14 08:04

To: jun68yktさん turbgraphics200さんの回答にあるincludesを使うほうがより良いかなと思います。配列メソッド増えたなぁ・・・。
jun68ykt

2018/01/14 08:06

増えましたね・・・。
guest

0

ベストアンサー

こんにちは。

以下のように toString してからの indexOf でどうでしょう?

javascript

1var key1 = [11,12,13] 2 3var key2 = [11,12,13,14,15,16,17] 4 5var included = (key2.toString().indexOf(key1.toString()) >= 0); 6 7console.log(included) // true 8 9key1 = [11,12,22] 10included = (key2.toString().indexOf(key1.toString()) >= 0); 11 12console.log(included) // false

以上参考になれば幸いです。


追記

上記の回答は、配列を toString()したときに得られる文字列の形式によっては
意図した判定をしてくれない可能性もあります。
私が確認したのは、以下のようにコンソールからのnode です。

イメージ説明


追記2

コメントにも書きましたが

javascript

1const included = (key1.filter(e => (key2.indexOf(e) >= 0)).length == key1.length)

でいかがでしょう?

つまり、 key1key2に含まれるのであれば、key1 から、 key2 に含まれない
要素を除去するフィルターを通しても、要素は1つも減らないので、配列の長さが変わらないはず、
という方法でチェックします。

投稿2018/01/14 06:43

編集2018/01/14 07:46
jun68ykt

総合スコア9058

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

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

naoya7076

2018/01/14 07:33

詳しく解説して頂きありがとうございます 説明が足りてませんでしたすみません var key1 = [11,12,17]と var key2 = [11,12,13,14,15,16,17]を比較した時もTrueを返すようにしたいです さらに var key3 = [11,32,15]と var key4 = [13,11,32,14,15]を比較した時もTrueを返すようにしたいです
jun68ykt

2018/01/14 07:42

あ、そうなんですね。早合点しました。 それであれば、 const included = (key1.filter(e => (key2.indexOf(e) >= 0)).length == key1.length) でいけるのではないかと思います。
naoya7076

2018/01/14 07:48

ありがとうございます!
jun68ykt

2018/01/14 07:53

解決されたようで、よかったです!
guest

0

気になるのは
var key1 = [11,12,17]が
var key2 = [11,12,13,14,15,16,17]に
含まれるのかどうかがわかりません。順番は関係ないのでしょうか?

これが含まれないなら私もjun68ykt氏と同じで文字列に直してindexOfすればいいと思います。
失礼ながらコードを拝借。joinメソッドで。

javascript

1var key1 = [11,12,13] 2 3var key2 = [11,12,13,14,15,16,17] 4 5var included = (key2.join(',').indexOf(key1.join(',')) >= 0); 6 7console.log(included)

当然順番が関係ないのならこのやり方は無理です。

投稿2018/01/14 07:28

sousuke

総合スコア3828

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

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

jun68ykt

2018/01/14 07:31

なるほどです。join のほうが、 配列の文字列形式という実行環境に依存しそうなtoStringよりも良さそうですね。
naoya7076

2018/01/14 07:33

説明が足りてませんでしたすみません var key1 = [11,12,17]と var key2 = [11,12,13,14,15,16,17]を比較した時もTrueを返すようにしたいです さらに var key3 = [11,32,15]と var key4 = [13,11,32,14,15]を比較した時もTrueを返すようにしたいです
sousuke

2018/01/14 07:34

配列は重複した値が入りますか?
naoya7076

2018/01/14 07:35

どちらも入りません
sousuke

2018/01/14 07:51

順番関係なし、双方値の重複がないとしてこうですかね?(未検証) 値の重複がないのでorでmatchさせた数ともとの配列の長さを比較します。 var key1 = [11,12,13] var key2 = [11,12,13,14,15,16,17] var re = new RegExp('('+key1.join(')|(')+')','g') var included = (key2.join(',').match(re).length >= key1.length);
naoya7076

2018/01/14 07:57

ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問