質問編集履歴
2
for文でグルグル回したら一応動いたので追記。でもまだ無駄が多い気がします。。
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
|
-
↓↓
|
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が何かを取り出すところまで追記しました!
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などが使えないので、素の状態で書きたいです。
|