- 締切済み
配列について
var myarray=new Array(); myarray[0]="a"; myarray[1]="b"; myarray[2]="c"; myarray[3]="b"; myarray[4]="a"; myarray[5]="d"; のような配列があります。ここから重複しないようにa,b,c,dだけを抜き出すのにはどのようにJavascriptで書いたらよいのでしょうか。 よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- NTJ
- ベストアンサー率44% (46/103)
> #4さん あらら、失礼しました。 連想配列だとjoin出来なかったですか(汗 記憶だけで書いたので、おもいきり間違ってしたかもです。 ご指摘有り難う御座います。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
#3>return wkRet.join(','); // ','は無くても良いが念のため。(笑 実際に試されたのでしょうか? ウチで試してみたところでは IE6,Firefox1.5 とも連想配列のjoin は、できないようですが・
- NTJ
- ベストアンサー率44% (46/103)
まず、JavaScriptのArry型にはマージ機構は無いようです。 なので、自力コーディングになります。 その内容ですが・・・ function merge(arg){ var wkRet=new Array(); for(var i in arg) wkRet[arg[i]]=arg[i]; return wkRet.join(','); // ','は無くても良いが念のため。(笑 } これでどうでしょか?(笑 排他部分は、BLUEPIXYさんのやり方同様、連想配列を使って、重複を弾いてます。 単純なループ一回で済ませていますので、数千件までの処理になら耐えると思います。(笑 結果をもし配列で使いたいのなら、単純にwkRetを返しても良いですし、順番を守りたいのなら、 myarray=merge(myarray).split(','); でOKですね。 JavaScriptはブラウザの処理内部でのループ(Array型のsort()メソッドを使うような処理)にはかなり耐えますが、スクリプト自体でのループでは、確実に処理が劣化します。 このあたりは、スクリプト言語の限界ですねぇ。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
function uniq(anArray){ var wk = new Array(); for(var x in anArray){ wk[anArray[x]]=anArray[x]; } var ret = new Array(); for(var x in wk){ ret.push(x); } return ret; } var myarray=["a","b","c","b","a","d"]; var uniq_array=uniq(myarray);//必要に応じてソートする alert(uniq_array.join(","));
- talepanda
- ベストアンサー率58% (45/77)
<html> <head> <script type="text/javascript"> <!-- var myarray=["a","b","c","b","a","d"]; var newarray=[]; for(var i=0;i<myarray.length;++i){ var found=false; for(var j=0;j<newarray.length;++j){if(newarray[j]==myarray[i]){found=true;break;}} if(!found)newarray.push(myarray[i]); } alert(myarray+"->"+newarray); //--> </script> </head> <body/> </html> もしくはprototype.js 1.5のEnumerable.uniq