回答編集履歴

1

machigai

2019/09/06 03:46

投稿

kyoya0819
kyoya0819

スコア10434

test CHANGED
@@ -4,20 +4,80 @@
4
4
 
5
5
 
6
6
 
7
- > ```JavaScript
7
+ ```JavaScript
8
8
 
9
- > var a = {"a":"a"};
9
+ function objectEquals(a, b){
10
10
 
11
- > var b = {"a":"a"};
12
11
 
13
- >
14
12
 
15
- > var aJSON = JSON.stringify(a);
13
+ if(a === b){
16
14
 
17
- > var bJSON = JSON.stringify(b);
15
+ // 同一インスタンスならtrueを返す
18
16
 
19
- >
17
+ return true;
20
18
 
19
+ }
20
+
21
+
22
+
23
+ // 比較対象双方のキー配列を取得する(順番保証のためソートをかける)
24
+
25
+ var aKeys = Object.keys(a).sort();
26
+
27
+ var bKeys = Object.keys(b).sort();
28
+
29
+
30
+
31
+ // 比較対象同士のキー配列を比較する
32
+
33
+ if(aKeys.toString() !== bKeys.toString()){
34
+
35
+ // キーが違う場合はfalse
36
+
37
+ return false;
38
+
39
+ }
40
+
41
+
42
+
43
+ // 値をすべて調べる。
44
+
45
+ var wrongIndex = aKeys.findIndex(function(value){
46
+
47
+ // 注意!これは等価演算子で正常に比較できるもののみを対象としています。
48
+
49
+ // つまり、ネストされたObjectやArrayなどには対応していないことに注意してください。
50
+
51
+ return a[value] !== b[value];
52
+
53
+ });
54
+
55
+
56
+
57
+ // 合致しないvalueがなければ、trueを返す。
58
+
59
+ return wrongIndex === -1;
60
+
61
+ }
62
+
63
+
64
+
65
+ var a = {"a":"a","b":"b"};
66
+
67
+ var b = {"b":"b","a":"a"};
68
+
69
+
70
+
21
- > console.log(aJSON === bJSON); // -> true
71
+ console.log(objectEquals(a, b)); // -> true
72
+
73
+
74
+
75
+ var c = {"a":"a","b":"c"};
76
+
77
+ var d = {"a":"a","b":"b"};
78
+
79
+
80
+
81
+ console.log(objectEquals(c, d)); // -> false
22
82
 
23
83
  ```