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

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

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

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

Q&A

解決済

2回答

1258閲覧

これって、簡略化して書けるでしょうか(javascript)

uer03108

総合スコア194

JavaScript

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

0グッド

0クリップ

投稿2018/12/17 23:05

編集2018/12/17 23:18

下記の重複確認部分(bl取得部分)は、簡略化して書くことは出来るでしょうか。
includesが使えないので。

javascript

1 2//データ 3let aryData = [{id_1 : "11", id_2 : "12", data : "aaaa"}, 4 {id_1 : "21", id_2 : "22", data : "bbbb"}, 5 {id_1 : "31", id_2 : "32", data : "cccc"}, 6 {id_1 : "41", id_2 : "42", data : "dddd"}]; 7 8//確認id 9let id_1 = "32"; 10let id_2 = "31"; 11 12//重複確認 13let bl = false; 14 15//データループ 16for(let data of aryData){ 17 if((data["id_1"] == id_1 && data["id_2"] == id_2) || 18 (data["id_1"] == id_2 && data["id_2"] == id_1))bl = true; 19} 20 21//重複なければ処理 22if(!bl){ 23 console.log("shori"); 24}

追記
filterに条件式を書けば、出来そうですね。
下記で良いのかな。

javascript

1let ary = aryData.filter(data => { 2 (data["id_1"] == id_1 && data["id_2"] == id_2) || 3 (data["id_1"] == id_2 && data["id_2"] == id_1) 4}); 5 6if(ary.length == 0){ 7 console.log("処理"); 8} 9

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

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

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

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

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

guest

回答2

0

基本的には追記部分のコードでスッキリ書けていると思います。

JavaScript

1let id_1 = "31"; 2let id_2 = "32"; 3let ary = aryData.filter(data => { 4 (data["id_1"] == id_1 && data["id_2"] == id_2) || 5 (data["id_1"] == id_2 && data["id_2"] == id_1) 6}); 7console.log(ary); // []

アロー関数は{}で始まる場合は明示的にreturn valueしないと何も返さないので、この書き方だと常に空配列になるはずなのでケアレスミスを直しましょう。

※find→someで全体的に書き直しました。

filterよりsomeを利用したほうが良いでしょう。
filterの場合は空、もしくは値の複数入った配列が取得できます。
つまりfor文で配列の中身を全て精査するような動作になります。

someの場合は1件該当する値を見つけたら、そこで捜索を打ち切ります。
つまり、for文のifで一致する値を見つけたらすぐにbreak;構文でループから抜ける処理に似た挙動になります。

JavaScript

1// 変数名は何がしたいかでちゃんと名付けた方が良いのと、letは後から変更したいケース以外では使わないように 2// JSでの配列の表現はこうした方が無難、コロンはキーの後にスペース無し 3const aryData = [ 4 {id_1: "11", id_2: "12", data: "aaaa"}, 5 {id_1: "21", id_2: "22", data: "bbbb"}, 6 {id_1: "31", id_2: "32", data: "cccc"}, 7 {id_1: "41", id_2: "42", data: "dddd"} 8]; 9const id_1 = "31"; 10const id_2 = "32"; 11 12// 「重複データ」が無ければ処理なので、hasDuplicatedDataという変数名にした 13const hasDuplicatedData = aryData.some(data => 14 (data.id_1 == id_1 && data.id_2 == id_2) || 15 (data.id_1 == id_2 && data.id_2 == id_1) 16); 17if (!hasDuplicatedData) { 18 console.log("処理"); 19} 20 21// someでスッキリ書けるから、関数化したほうが良さそう 22const isDuplicatedData = data => 23 (data.id_1 == id_1 && data.id_2 == id_2) || 24 (data.id_1 == id_2 && data.id_2 == id_1); 25if (!aryData.some(isDuplicatedData)) { 26 console.log("処理")l 27}

投稿2018/12/18 02:25

編集2018/12/18 03:12
miyabi-sun

総合スコア21158

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

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

KSwordOfHaste

2018/12/18 03:03

有無が問題で重複した要素そのものに興味がないのならsomeでもよい気がしました。 JSのポータビリティーにまったく疎いのでsomeに互換性上の使いにくさがあるかどうか確信がないですが。
KSwordOfHaste

2018/12/18 03:47

MDNの互換性情報を見ても「実際上使ってよいか」の判断は自分には難しくプロの方にコメントいただいて初めて「そうかぁ」と思えるような次第です...。今回はたまたま外れコメントでもなかったようでホッとしました。コメントいただきありがとうございました。
uer03108

2018/12/19 09:36

有難うございましたm(_ _)m 参考になりました。 コードレビューの機会が殆どないもので。
guest

0

ベストアンサー

id_1とid_2がかならず排他的な値であれば以下でいけます

javascript

1var a = [ 2 {id_1 : "11", id_2 : "12", data : "aaaa"}, 3 {id_1 : "21", id_2 : "22", data : "bbbb"}, 4 {id_1 : "31", id_2 : "32", data : "cccc"}, 5 {id_1 : "41", id_2 : "42", data : "dddd"}, 6 ]; 7var id_1="32"; 8var id_2="31"; 9var flg=a.map(function(x){ 10 return [x.id_1,x.id_2]; 11}).filter(function(x){ 12 return x.indexOf(id_1)>=0 && x.indexOf(id_2)>=0; 13}).length>0; 14console.log(flg);

投稿2018/12/18 00:48

yambejp

総合スコア114915

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問