仕事を頑張る人のおしりトラブル対策

いつもお世話になっております表題の通り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と中身が同じなため削除された

という形で帰ってきてほしいです。

少し時間が無くて完成されたサンプルコードなど教えて頂けると幸いです
どうぞよろしくお願いします!

このQ&Aに関連する最新のQ&A

A 回答 (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);
    • good
    • 0
この回答へのお礼

ありがとうございます。
試しにやってみたのですが、

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というメソッドが使えないということでしょうか。

うーん分かりません

お礼日時:2014/08/06 22:55

なんかクリティカルな方法がありそうな気はしますが


一つ一つを検証しても大した手間ではないので、冗長な方法

<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+"-&gt;");
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>
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qjavascriptでセレクトボックスの"selected"を動的につ

javascriptでセレクトボックスの"selected"を動的につける方法について質問させてください。

現在、以下のようなフォームを作成しました。

<select name='year'>
<option value='2010'>2010</option>
<option value='2011'>2011</option>
</select>年

<select name='month'>
<option value='1'>1</option>
<option value='2'>2</option>
<option value='3'>3</option>
<option value='4'>4</option>
<option value='5'>5</option>
<option value='6'>6</option>
<option value='7'>7</option>
<option value='8'>8</option>
<option value='9'>9</option>
<option value='10'>10</option>
<option value='11'>11</option>
<option value='12'>12</option>
</select>月

<select name='day'>
<option value='1'>1</option>
<option value='2'>2</option>
<option value='3'>3</option>
<option value='4'>4</option>
<option value='5'>5</option>
<option value='6'>6</option>
<option value='7'>7</option>
<option value='8'>8</option>
<option value='9'>9</option>
<option value='10'>10</option>
<option value='11'>11</option>
<option value='12'>12</option>
<option value='13'>13</option>
<option value='14'>14</option>
<option value='15'>15</option>
<option value='16'>16</option>
<option value='17'>17</option>
<option value='18'>18</option>
<option value='19'>19</option>
<option value='20'>20</option>
<option value='21'>21</option>
<option value='22'>22</option>
<option value='23'>23</option>
<option value='24'>24</option>
<option value='25'>25</option>
<option value='26'>26</option>
<option value='27'>27</option>
<option value='28'>28</option>
<option value='29'>29</option>
<option value='30'>30</option>
<option value='31'>31</option>
</select>日


このセレクトボックスに、例えば今日の日付"2010年9月30日"だったら、それぞれの年、月、日の<option>に"selected"をつけたいのですが、javascriptではどのようにして実現したら良いのでしょうか?

よろしくお願いします。

javascriptでセレクトボックスの"selected"を動的につける方法について質問させてください。

現在、以下のようなフォームを作成しました。

<select name='year'>
<option value='2010'>2010</option>
<option value='2011'>2011</option>
</select>年

<select name='month'>
<option value='1'>1</option>
<option value='2'>2</option>
<option value='3'>3</option>
<option value='4'>4</option>
<option value='5'>5</option>
<option value='6'>6</option>
<option value='7'>7</option>
<option value='8...続きを読む

Aベストアンサー

こんな感じで・・・

<script>
window.onload=function(){
var f=document.getElementById("f0");
var ymd=new Date();
checkSelect(f.elements["year"],ymd.getFullYear());
checkSelect(f.elements["month"],ymd.getMonth() +1);
checkSelect(f.elements["day"],ymd.getDate());
}
function checkSelect(obj,val){
for(var i=0;i<obj.length;i++){
if(obj[i].value==val){
obj[i].selected=true;
break;
}
}
}
</script>
<form id="f0">
<div>
<select name='year'>
<option value='2009'>2009</option>
<option value='2010'>2010</option>
<option value='2011'>2011</option>
</select>年

<select name='month'>
<option value='8'>8</option>
<option value='9'>9</option>
<option value='10'>10</option>
</select>月

<select name='day'>
<option value='29'>29</option>
<option value='30'>30</option>
<option value='31'>31</option>
</select>日
</div>
</form>

こんな感じで・・・

<script>
window.onload=function(){
var f=document.getElementById("f0");
var ymd=new Date();
checkSelect(f.elements["year"],ymd.getFullYear());
checkSelect(f.elements["month"],ymd.getMonth() +1);
checkSelect(f.elements["day"],ymd.getDate());
}
function checkSelect(obj,val){
for(var i=0;i<obj.length;i++){
if(obj[i].value==val){
obj[i].selected=true;
break;
}
}
}
</script>
<form id="f0">
<div>
<select name='year'>
<opt...続きを読む

Qidを使わずにonclickで自身の要素取得

javascriptで
<a href="XXX.XXX" title="ゴール" onclick="element()">test</a>
function() {
idを使わずにここにtitle属性のゴールを習得する方法を記述したいのですが、わかりません
よろしくお願いします
}

Aベストアンサー

こんにちは。


==== HTML
<a href="" title="ゴール" onclick="getTitle(this);return false;">test</a>
<a href="" title="スタート" onclick="getTitle(this);return false;">test2</a>


==== JavaScript
function getTitle ( obj ) {
var title = obj.getAttribute('title');
alert ( title );
}

こういうことでしょうか。
違っていたらすみません。

QInner join と Left joinの明確な違いは?

Inner join と Left joinの違いがよくわかりません。
教えてください。

Aベストアンサー

出てくる結果が違います。

テーブル1のフィールド1に、






が、

テーブル2のフィールド1に、






が入力されている場合、

SELECT [テーブル1].[フィールド1], [テーブル2].[フィールド1]
FROM テーブル1 LEFT JOIN テーブル2 ON [テーブル1].[フィールド1]=[テーブル2].[フィールド1];
では、結果は、
テーブル1.フィールド1 テーブル2.フィールド1
1               1
2               2
3               3
4               NULL
5               NULL
6               NULL
の6レコードが出力されますが、

SELECT [テーブル1].[フィールド1], [テーブル2].[フィールド1]
FROM テーブル1 INNER JOIN テーブル2 ON [テーブル1].[フィールド1]=[テーブル2].[フィールド1];
では、結果は、
テーブル1.フィールド1 テーブル2.フィールド1
1               1
2               2
3               3
の3レコードしか出力されません。

出てくる結果が違います。

テーブル1のフィールド1に、






が、

テーブル2のフィールド1に、






が入力されている場合、

SELECT [テーブル1].[フィールド1], [テーブル2].[フィールド1]
FROM テーブル1 LEFT JOIN テーブル2 ON [テーブル1].[フィールド1]=[テーブル2].[フィールド1];
では、結果は、
テーブル1.フィールド1 テーブル2.フィールド1
1               1
2               2
3           ...続きを読む

Q