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

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

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

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

2回答

5072閲覧

JavaScriptで2つの配列を比較して重複を削除したい

gonsy

総合スコア19

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2020/04/09 08:07

###実現したいこと

以下aとbから重複を削除して

result = ["a", "イヌ", "ネコ", "b", "c"]

を得たいです。

js

1var a = [ 'a', 'イヌ', 'ネコ', 'b' ]; 2var b = [ 'c', 'ネコ', 'イヌ' ];

まずaを全てresultに追加し、bの方はaにすでにあればresultには追加しない、という流れです。

###発生している問題
result = ["a", "イヌ", "ネコ", "b", "c", "c", "c", "c"]

となってしまい、cが追加され続けてしまいます。

ループで比較していますが、breakで抜けることができないせいでしょうか?

###該当のソースコード

js

1var a = [ 'a', 'イヌ', 'ネコ', 'b' ]; 2var b = [ 'c', 'ネコ', 'イヌ' ]; 3var result = [], ai, bi; 4 5for ( ai=0; ai<a.length; ai++ ) { 6 result.push( a[ai] ); 7} 8 9for ( ai=0; ai<a.length; ai++ ) { 10 for ( bi=0; bi<b.length; bi++ ) { 11 if ( a[ai] !== b[bi] ) { 12 result.push( b[bi] ); 13 break; 14 } 15 } 16} 17 18console.log( result );

###試したこと

forが2回あるから break 2; にしてみたり、または return; とかを試したのですができません。
特殊な方法が必要でしょうか?

jQueryでも構わないので、解決策をご指南頂けましたら幸いです。

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

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

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

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

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

guest

回答2

0

ベストアンサー

以下のようなコードで実装できます!
短くわかりやすい書き方なので調べて出てくるのとは少し違うかもしれません

js

1 2const a = [ 'a', 'イヌ', 'ネコ', 'b' ]; 3const b = [ 'c', 'ネコ', 'イヌ' ]; 4 5const result = Array.from(new Set([...a, ...b])); 6console.log(result); 7

簡単な説明:
[...a, ...b] で配列をつなげる
new Set()で重複禁止の配列のようなものにする
Array.fromで配列のようなものから配列に戻す

投稿2020/04/09 08:18

mouse_484

総合スコア759

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

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

gonsy

2020/04/09 08:26

ドットを3つ書いてカンマでつなげると、array_mergeの効果があるのですか?しかもnew_Setで勝手に重複が削除されるとは。 まさに求めていたものでした。ありがとうございます。
gonsy

2020/04/09 08:31

ありがとうございます。勉強しておきます。
shinji709

2020/04/09 08:41

const result = [...new Set([...a, ...b])]; にするともう少し短い
guest

0

以下でできました。しかし結果はresultという変数で得たいので、もしそういった方法があれば引き続きご回答お待ちしております。

js

1var a = [ 'a', 'イヌ', 'ネコ', 'b' ]; 2var b = [ 'c', 'ネコ', 'イヌ' ]; 3 4for ( i=0; i<b.length; i++ ) { 5 if ( ! a.includes(b[i]) ) { 6 a.push( b[i] ); 7 } 8} 9 10console.log( a );

投稿2020/04/09 08:20

gonsy

総合スコア19

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問