回答編集履歴
2
コードの差し替え
answer
CHANGED
@@ -5,25 +5,37 @@
|
|
5
5
|
function getUnique(a,b) {
|
6
6
|
let hasA = {};
|
7
7
|
let hasB = {};
|
8
|
+
|
8
9
|
let setPos = (oj,v) => {
|
9
10
|
let pos = `${v.x}:${v.y}`;
|
10
11
|
(oj[pos] || (oj[pos]={ count:0, item:v })).count++;
|
11
12
|
};
|
12
13
|
let filterByPos = (oj,oj2) => {
|
14
|
+
let rslt = [];
|
13
|
-
|
15
|
+
let keys = Object.keys( oj );
|
16
|
+
for ( let i=0, l=keys.length; i<l; ++i ) {
|
17
|
+
let pos = keys[i];
|
14
|
-
if( oj2.hasOwnProperty(pos) ) {
|
18
|
+
if( oj2.hasOwnProperty(pos) ) {
|
19
|
+
// 両方に存在しない
|
15
20
|
delete oj[pos];
|
16
21
|
delete oj2[pos]
|
17
22
|
}
|
18
|
-
//else if( oj[pos].item > 1 ) { // typo
|
19
|
-
else if( oj[pos].count > 1 ) {
|
23
|
+
else if( oj[pos].count > 1 ) {
|
24
|
+
// oj内で重複しない
|
20
25
|
delete oj[pos]
|
21
26
|
}
|
22
|
-
|
27
|
+
if( oj[pos] ) rslt.push(oj[pos].item);
|
23
|
-
}
|
28
|
+
}
|
29
|
+
return rslt;
|
24
30
|
};
|
31
|
+
|
25
|
-
a.forEach(v => setPos(hasA,v) );
|
32
|
+
a.forEach(v => {setPos(hasA,v)} );
|
26
|
-
b.forEach(v => setPos(hasB,v) );
|
33
|
+
b.forEach(v => {setPos(hasB,v)} );
|
34
|
+
return [
|
35
|
+
filterByPos( hasA, hasB )
|
27
|
-
|
36
|
+
, filterByPos( hasB, hasA )
|
37
|
+
];
|
28
|
-
}
|
38
|
+
};
|
29
|
-
```
|
39
|
+
```
|
40
|
+
オブジェクト(``{x: num, y:num }``)を返却してなかったのでコードを差し替えしました。
|
41
|
+
filter().map() を使うべきところforで走査回数を抑えました。
|
1
typo のため
answer
CHANGED
@@ -15,7 +15,8 @@
|
|
15
15
|
delete oj[pos];
|
16
16
|
delete oj2[pos]
|
17
17
|
}
|
18
|
+
//else if( oj[pos].item > 1 ) { // typo
|
18
|
-
else if( oj[pos].
|
19
|
+
else if( oj[pos].count > 1 ) { // oj内で重複しない
|
19
20
|
delete oj[pos]
|
20
21
|
}
|
21
22
|
return oj[pos] && oj[pos].item;
|