![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
いつもお世話になっております表題の通りJSで配列同士(連想配列の値)で重複した値があったらまとめて再度配列に格納したいのですが、プログラムの書き方が思いつきません、、
教えて頂けないでしょうか??
例、イメージ)
配列A = 配列B[key1=>1,key2=>2],配列C[key1=>1,key2=>2],配列D[key1=>2,Key2=>4];
この場合処理をして返ってくる期待値は
配列A[配列B[key1=>1,key2=>2],配列D[key1=>2,key2=>4]]
※配列Cは配列Bと中身が同じなため削除された
という形で帰ってきてほしいです。
少し時間が無くて完成されたサンプルコードなど教えて頂けると幸いです
どうぞよろしくお願いします!
No.2ベストアンサー
- 回答日時:
// JS1.6 or ES5 or IE9
function uniq(a) {
var compare = function(x,y){ for (var i in x) if (x[i] !== y[i]) return false; return true };
var makeCondition = function(o){return function(x){return compare(x,o) && compare(o,x)}};
var callback = function(p,c){if (!p.some(makeCondition(c))) p.push(c); return p};
return a.reduce(callback, []);
}
重複がまとめられた配列A = uniq(配列A);
ありがとうございます。
試しにやってみたのですが、
function uniq(a) {
var compare = function(x,y){ for (var i in x) if (x[i] !== y[i]) return false; return true };
var makeCondition = function(o){return function(x){return compare(x,o) && compare(o,x)}};
var callback = function(p,c){if (!p.some(makeCondition(c))) p.push(c); return p};
return a.reduce(callback, []);
}
var a = uniq(parentObj<-配列を入れたオブジェクト);
TypeError: Cannot find function reduce in object [object Object]. (line 139)
とエラーがでました。
そもそもreduceというメソッドが使えないということでしょうか。
うーん分かりません
No.1
- 回答日時:
なんかクリティカルな方法がありそうな気はしますが
一つ一つを検証しても大した手間ではないので、冗長な方法
<script>
var array_A = [
{"key1":1,"key2":2},
{"key1":1,"key2":2},
{"key1":1,"key2":2},
{"key1":1,"key2":3},
{"key1":1,"key2":4},
{"key1":1,"key2":2},
{"key1":2,"key2":4},
{"key3":2,"key2":4},
{"key1":2,"key2":4}
];
//元データ表示
view(array_A);
//共通データ削除
for(var i=array_A.length -1;i>=0;i--){
for(var j=array_A.length -1;j>i;j--){
if(check(array_A[i],array_A[j])){
//同じデータを表示
document.write(i+":"+j+"<br>");
//同じデータを削除
array_A.splice(j,1);
}
}
}
//結果表示
view(array_A);
function view(arr){
for(var i=0;i<arr.length;i++){
document.write(i+"->");
for(var j in arr[i]) document.write(j+":"+arr[i][j]);
document.write("<br>");
}
}
function check(obj1,obj2){
//かなり手を抜いて検証しているので改善の余地大
var flag=true;
for(var i in obj1){
if(obj1[i]!=obj2[i]) flag=false;
}
for(var i in obj2){
if(obj1[i]!=obj2[i]) flag=false;
}
return flag;
}
</script>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java Java 南京錠 2 2023/02/04 11:46
- Visual Basic(VBA) Vba 配列の中の特定文字列の位置の調べ方 9 2022/05/23 17:46
- Visual Basic(VBA) エクセルVBAについて 8 2022/07/13 22:41
- JavaScript java keyを配列で表記したい 10 2022/12/01 17:53
- Excel(エクセル) ExcelVBAでリストの項目に必要数と同じ手配数を分配していくマクロを作りたいです。 1 2022/07/29 18:36
- Visual Basic(VBA) ExcelVBAで、index、match関数を使用して、指定範囲に出力したい 3 2022/10/18 21:53
- Visual Basic(VBA) vba 重複データ合算 5 2023/07/05 18:55
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- その他(プログラミング・Web制作) pythonにおける単方向リストの実装について 4 2022/07/13 12:34
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
同じIDで定義した要素の配列を...
-
javascript 変数名の連結をしたい
-
どうすればresponseText結果を...
-
HTMLの外部jsのようなcgiファイ...
-
jspからjavascriptの変数引継ぎ
-
javascriptで変数名
-
フォーム入力値の重複チェック
-
JavaScriptの連想配列について
-
javascriptで行を抽出したいです。
-
C#テキストボックスの文字を配...
-
javascriptを用いて作成された...
-
【急ぎ】javascriptで、特定の...
-
JavaScriptでソートすることは...
-
Wikipedia APIの結果からタイト...
-
既存オブジェクトに対するプロ...
-
配列に格納した値が保存されない
-
gas 配列の開始番号
-
javascritp「sort」メソッドに...
-
javascript 省略した記述と思わ...
-
オブジェクトから任意のプロパ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
同じIDで定義した要素の配列を...
-
C#テキストボックスの文字を配...
-
jspからjavascriptの変数引継ぎ
-
javascript 変数名の連結をしたい
-
二次元配列を使って順位をだす...
-
React hooksが値を返して配列変...
-
undefinedを表示させない方法は...
-
フォーム入力値の重複チェック
-
javascriptで行を抽出したいです。
-
JavaScriptでの動的な多次元配...
-
多次元配列から最大値を1行また...
-
HTMLで誕生石と星座をアラート...
-
JSONデータを50音順でソートしたい
-
重複しないようにランダムで表...
-
1から20までの整数から、重複な...
-
JavaScriptにおける[] とか :...
-
gas 配列
-
【JavaScript】オブジェクト型...
-
WSH(Jscript)でファイル一覧
-
JavaScriptで簡単なクイズを作...
おすすめ情報