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

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

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

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

配列

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

Q&A

解決済

2回答

7897閲覧

2つの配列の値の比較

m_qig

総合スコア6

JavaScript

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

配列

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

0グッド

1クリップ

投稿2017/10/18 13:17

編集2017/10/19 02:04

10/19
質問意図がわかりづらかったので編集しました。

配列の中身を比較したいです。

例えば、

var ex=[a,b,c]; var ex2=[e,f,g];

上記2つの配列があったとして、
aとe,f,gそれぞれ、
bとe,f,gそれぞれ、
cとe,f,gそれぞれ…
が等しいかを比較したいです。

最終的に、配列aと配列bが、中身の順番はちがえど値が同じならokというふうにしたいです。

var ex3=new Array; var flag; for(var i=0; i<ex.length; i++){ for(var j=0; j<ex2.length; j++){ if(ex[i]===ex2[j]){ flag==true;} } }

昨日回答いただき考えましたが、この上の記述だと、1つでも同じ値があればtrueになってしまいます…たとえば、

ex=[a,a,b] ex2=[a,b,b] //これはNG ex=[a,a,b] ex2=[a,b,a] //これはOK

こういうことを調べたいのですが、うまくいきません…

今ある知識で解決したいので、filterやJSONといったものは
使わずに解決したいです。
答えではなくヒントで構いませんのでどなたかよろしくお願いします…

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

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

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

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

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

kei344

2017/10/18 13:19

質問文のコードはそれぞれコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。
m_qig

2017/10/18 13:26

ご指摘ありがとうございます。修正致しました。
kei344

2017/10/19 11:37

まだ質問が「受付中」になっていますが、いったん「解決済」にされてはいかがでしょうか。また、解決されていないなら状況を質問文に追記ください。
guest

回答2

0

ヒントとしてコメントで書いてみました

※aやらbなどは数値と想定

JavaScript

1var ex = [1, 2, 3]; 2var ex2 = [2, 1, 4]; 3var ex3 = []; 4 5for(var i = 0; i < ex.length; i++) { 6 // 一致したかどうか判定するフラグ利用 7 8 for(var j = 0; j < ex2.length; j++) { 9 if(ex[i] === ex2[j]) { 10 // 一致したからフラグを操作してbreakでjのループを抜ける 11 break; 12 } 13 } 14 15 // フラグをみてex3に入れる 16} 17 18// 確認のための出力 19console.log(ex3);

投稿2017/10/18 13:54

rururu3

総合スコア5545

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

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

m_qig

2017/10/19 01:33

回答ありがとうございます。 忘れていたことがあって、比べた2つの値が重複していなかった場合、ex2[j]も新しい配列cにpushしたいのですが、どこに書いてもundefinedになってしまいます…これは不可能なのでしょうか??
rururu3

2017/10/19 01:53

どこまで出来たのかを含め、質問内容を編集してくださいな
guest

0

ベストアンサー

JavaScript

1var a = [ 1, 2, 3 ]; 2var b = [ 2, 4, 6 ]; 3var c = [], i, j, flag; 4 5for ( i = 0; i < a.length; i++ ) { 6 flag = true; 7 for ( j = 0; j < b.length; j++ ) { 8 if ( a[ i ] === b[ j ] ) { 9 flag = false; 10 break; 11 } 12 } 13 if ( flag ) { 14 c.push( a[ i ] ); 15 } 16} 17console.log( c ); 18```**動くサンプル:**[https://jsfiddle.net/8ct9asqd/](https://jsfiddle.net/8ct9asqd/) 19 20--- 21 22 23**追記:** 24 25なにかteratailのバグで変な表示になっていたので修正。 26 27--- 28 29 30**追記:** 31 32前提条件が変わったので追記。 33配列内が文字列にできるもの限定ですが。 34 35```JavaScript 36var a, b, c; 37a = [ 1, 2, 3 ]; 38b = [ 2, 4, 6 ]; 39c = a.sort().join() === b.sort().join(); 40console.log( c ); 41 42a = [ 6, 2, 4 ]; 43b = [ 2, 4, 6 ]; 44c = a.sort().join() === b.sort().join(); 45console.log( c ); 46```**動くサンプル:**[https://jsfiddle.net/8ct9asqd/1/](https://jsfiddle.net/8ct9asqd/1/) 47 48 49【Array.prototype.sort() - JavaScript | MDN50[https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/sort](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/sort) 51 52【Array.prototype.join() - JavaScript | MDN53[https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/join](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/join)

投稿2017/10/18 13:49

編集2017/10/19 02:17
kei344

総合スコア69398

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

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

m_qig

2017/10/19 01:34

回答ありがとうございます。 忘れていたことがあって、比べた2つの値が重複していなかった場合、ex2[j]も新しい配列cにpushしたいのですが、どこに書いてもundefinedになってしまいます…これは不可能なのでしょうか??
kei344

2017/10/19 02:06

試したコードを質問文に「追記」してください。(決して元のコードを消さないでください)
m_qig

2017/10/19 02:22

すみません、せっかくコメントいただいていましたがすれ違いで本文を変えてしまいました… 今ちょうど自分もsortを試していたのですが、中身も順番も全て一致している場合はまた違う条件を出したいのです。 ・中身は一緒だが順番は違う→当たり ・中身も順番も全て一致→大当たり みたいな感じです。
kei344

2017/10/19 02:25

ソートする前に確認して、それが違う場合ソートとして確認すればよいだけだと思いますよ。
m_qig

2017/10/19 04:04

できました…! ただ、sortの後になぜjoinも使うのですか?? 貼っていただいたリンクの内容はなんとなく理解できますが、sortと一緒に使った時にどんな効果が得られるのかいまいちわかりません… よければ教えていただきたいです…。
kei344

2017/10/19 04:45

配列同士をそのまま比較できないからです。 たとえば、「[ 1, 2, 3 ]===[ 1, 2, 3 ]」は false になります。 なのでjoinを使って文字列にしています。もっと良い比較方法も組めると思いますが、手抜きをしました。
m_qig

2017/10/19 05:00

なるほど…toStringではダメなのでしょうか?
kei344

2017/10/19 05:03

あ、そっちのほうがいいですね。
m_qig

2017/10/19 09:45

そうなんですね!笑 いろいろ本当にありがとうございます…!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問