質問するログイン新規登録

回答編集履歴

2

コードの差し替え

2019/11/11 10:22

投稿

AkitoshiManabe
AkitoshiManabe

スコア5434

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
- return Object.keys( oj ).filter( pos => {
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 ) { // oj内で重複しない
23
+ else if( oj[pos].count > 1 ) {
24
+ // oj内で重複しない
20
25
  delete oj[pos]
21
26
  }
22
- return oj[pos] && oj[pos].item;
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
- return [ filterByPos( hasA, hasB ), filterByPos( hasB, hasA ) ];
36
+ , filterByPos( hasB, hasA )
37
+ ];
28
- }
38
+ };
29
- ```
39
+ ```
40
+ オブジェクト(``{x: num, y:num }``)を返却してなかったのでコードを差し替えしました。
41
+ filter().map() を使うべきところforで走査回数を抑えました。

1

typo のため

2019/11/11 10:22

投稿

AkitoshiManabe
AkitoshiManabe

スコア5434

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].item > 1 ) { // oj内で重複しない
19
+ else if( oj[pos].count > 1 ) { // oj内で重複しない
19
20
  delete oj[pos]
20
21
  }
21
22
  return oj[pos] && oj[pos].item;