回答編集履歴

1

someで書き直し

2018/12/18 03:12

投稿

miyabi-sun
miyabi-sun

スコア21158

test CHANGED
@@ -26,13 +26,11 @@
26
26
 
27
27
 
28
28
 
29
- letを普段遣いしていますが**IE11非対応のサイト**と考えて良いのでしょうか?
30
-
31
- もしくはBabelかなにかES6以降のコードをES5変換する用意などは出来ていすか?
29
+ ※find→someで全体的書き直しした。
32
30
 
33
31
 
34
32
 
35
- であればfilterよりfindを利用したほうが良いでしょう。
33
+ filterより[some](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/some)を利用したほうが良いでしょう。
36
34
 
37
35
  filterの場合は空、もしくは値の複数入った配列が取得できます。
38
36
 
@@ -40,25 +38,13 @@
40
38
 
41
39
 
42
40
 
43
- findの場合は1件該当する値を見つけたら、そこで捜索を打ち切ります。
41
+ someの場合は1件該当する値を見つけたら、そこで捜索を打ち切ります。
44
42
 
45
43
  つまり、for文のifで一致する値を見つけたらすぐに`break;`構文でループから抜ける処理に似た挙動になります。
46
44
 
47
45
 
48
46
 
49
47
  ```JavaScript
50
-
51
- // オブジェクトは空であっても必ずtrueとして判定される
52
-
53
- console.log(Boolean({})); // true
54
-
55
-
56
-
57
- // findで見つからなければundefinedになる
58
-
59
- console.log([].find(_ => false)); // undefined
60
-
61
-
62
48
 
63
49
  // 変数名は何がしたいかでちゃんと名付けた方が良いのと、letは後から変更したいケース以外では使わないように
64
50
 
@@ -82,9 +68,9 @@
82
68
 
83
69
 
84
70
 
85
- // 「重複データ」が無ければ処理なので、duplicatedDataという変数名にした
71
+ // 「重複データ」が無ければ処理なので、hasDuplicatedDataという変数名にした
86
72
 
87
- const duplicatedData = aryData.find(data =>
73
+ const hasDuplicatedData = aryData.some(data =>
88
74
 
89
75
  (data.id_1 == id_1 && data.id_2 == id_2) ||
90
76
 
@@ -92,10 +78,26 @@
92
78
 
93
79
  );
94
80
 
95
- if (!duplicatedData) {
81
+ if (!hasDuplicatedData) {
96
82
 
97
83
  console.log("処理");
98
84
 
99
85
  }
100
86
 
87
+
88
+
89
+ // someでスッキリ書けるから、関数化したほうが良さそう
90
+
91
+ const isDuplicatedData = data =>
92
+
93
+ (data.id_1 == id_1 && data.id_2 == id_2) ||
94
+
95
+ (data.id_1 == id_2 && data.id_2 == id_1);
96
+
97
+ if (!aryData.some(isDuplicatedData)) {
98
+
99
+ console.log("処理")l
100
+
101
+ }
102
+
101
103
  ```