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

質問編集履歴

2

for文でグルグル回したら一応動いたので追記。でもまだ無駄が多い気がします。。

2016/07/03 05:45

投稿

leila
leila

スコア13

title CHANGED
File without changes
body CHANGED
@@ -1,8 +1,11 @@
1
1
  二次元配列で、中の配列の特定keyに対するvalueが重複していた時に
2
2
  そのvalueを持つもの全てを削除したいです。
3
3
 
4
+ 少しコード直してみて、動くには動いたのですが
5
+ とても無駄が多いように思っているので良い方法が知りたいです。
4
6
 
5
7
 
8
+
6
9
  ###実現したいこと
7
10
  普通の配列だとこんなイメージ。
8
11
  [1,2,2,3,4,4,4] → [1,3]
@@ -18,7 +21,7 @@
18
21
  そもそも全部消したいとなると、一度重複するものを抽出して更に突合させないといけなくて
19
22
  しかもそれが二次元配列かつ連想配列だと...と混乱してきてしまいました。。
20
23
 
21
- ↓↓重複するbを探して度抜出しところ
24
+ ↓↓一応これでできたけど、無駄がすごく多いきがする...
22
25
  ```JavaScript
23
26
  var arr = [{a:1,b:"h"},{a:1,b:"e"},{a:2,b:"l"},{a:3,b:"l"},{a:1,b:"o"}]
24
27
 
@@ -31,6 +34,17 @@
31
34
  // check中のものが配列の中で最初にhitして、別でもhitする場合だけ抽出
32
35
  return arr.indexOf(x) === i && i !== arr.lastIndexOf(x);
33
36
  });
37
+
38
+ var compArr = [];
39
+ for(i=0; i<arr.length; i++){
40
+ var flg = false;
41
+ for(j=0; j<dubble.length; j++){
42
+ if(arr[i]["b"] == dubble[j]){
43
+ flg = true;
44
+ }
45
+ }
46
+ if(!flg) compArr.push(arr[i]);
47
+ }
34
48
  ```
35
49
 
36
50
  ###補足情報(言語/FW/ツール等のバージョンなど)

1

コメントいただいた、重複しているbが何かを取り出すところまで追記しました!

2016/07/03 05:45

投稿

leila
leila

スコア13

title CHANGED
File without changes
body CHANGED
@@ -18,5 +18,20 @@
18
18
  そもそも全部消したいとなると、一度重複するものを抽出して更に突合させないといけなくて
19
19
  しかもそれが二次元配列かつ連想配列だと...と混乱してきてしまいました。。
20
20
 
21
+ ↓↓重複するbを探して一度抜き出したところ
22
+ ```JavaScript
23
+ var arr = [{a:1,b:"h"},{a:1,b:"e"},{a:2,b:"l"},{a:3,b:"l"},{a:1,b:"o"}]
24
+
25
+ // 一度bだけ取り出して、重複しているものを探す
26
+ var check = [];
27
+ for(i=0; i<arr.length; i++){
28
+ check.push(arr[i]["b"]);
29
+ }
30
+ var dubble = check.filter(function(x, i, arr){
31
+ // check中のものが配列の中で最初にhitして、別でもhitする場合だけ抽出
32
+ return arr.indexOf(x) === i && i !== arr.lastIndexOf(x);
33
+ });
34
+ ```
35
+
21
36
  ###補足情報(言語/FW/ツール等のバージョンなど)
22
37
  jQueryなどが使えないので、素の状態で書きたいです。