回答編集履歴
1
someで書き直し
answer
CHANGED
@@ -12,23 +12,16 @@
|
|
12
12
|
|
13
13
|
アロー関数は`{}`で始まる場合は明示的に`return value`しないと何も返さないので、この書き方だと常に空配列になるはずなのでケアレスミスを直しましょう。
|
14
14
|
|
15
|
-
letを普段遣いしていますが**IE11非対応のサイト**と考えて良いのでしょうか?
|
16
|
-
|
15
|
+
※find→someで全体的に書き直しました。
|
17
16
|
|
18
|
-
|
17
|
+
filterより[some](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/some)を利用したほうが良いでしょう。
|
19
18
|
filterの場合は空、もしくは値の複数入った配列が取得できます。
|
20
19
|
つまりfor文で配列の中身を全て精査するような動作になります。
|
21
20
|
|
22
|
-
|
21
|
+
someの場合は1件該当する値を見つけたら、そこで捜索を打ち切ります。
|
23
22
|
つまり、for文のifで一致する値を見つけたらすぐに`break;`構文でループから抜ける処理に似た挙動になります。
|
24
23
|
|
25
24
|
```JavaScript
|
26
|
-
// オブジェクトは空であっても必ずtrueとして判定される
|
27
|
-
console.log(Boolean({})); // true
|
28
|
-
|
29
|
-
// findで見つからなければundefinedになる
|
30
|
-
console.log([].find(_ => false)); // undefined
|
31
|
-
|
32
25
|
// 変数名は何がしたいかでちゃんと名付けた方が良いのと、letは後から変更したいケース以外では使わないように
|
33
26
|
// JSでの配列の表現はこうした方が無難、コロンはキーの後にスペース無し
|
34
27
|
const aryData = [
|
@@ -40,12 +33,20 @@
|
|
40
33
|
const id_1 = "31";
|
41
34
|
const id_2 = "32";
|
42
35
|
|
43
|
-
// 「重複データ」が無ければ処理なので、
|
36
|
+
// 「重複データ」が無ければ処理なので、hasDuplicatedDataという変数名にした
|
44
|
-
const
|
37
|
+
const hasDuplicatedData = aryData.some(data =>
|
45
38
|
(data.id_1 == id_1 && data.id_2 == id_2) ||
|
46
39
|
(data.id_1 == id_2 && data.id_2 == id_1)
|
47
40
|
);
|
48
|
-
if (!
|
41
|
+
if (!hasDuplicatedData) {
|
49
42
|
console.log("処理");
|
50
43
|
}
|
44
|
+
|
45
|
+
// someでスッキリ書けるから、関数化したほうが良さそう
|
46
|
+
const isDuplicatedData = data =>
|
47
|
+
(data.id_1 == id_1 && data.id_2 == id_2) ||
|
48
|
+
(data.id_1 == id_2 && data.id_2 == id_1);
|
49
|
+
if (!aryData.some(isDuplicatedData)) {
|
50
|
+
console.log("処理")l
|
51
|
+
}
|
51
52
|
```
|