Comment detail
アレイのuniq (Nested Flatten)Object Type にも対応した書き方。
効率悪いとか言わない><
alert([1, 2, {}, {}, 2, 1].uniq()); // [1, 2, {}, {}]
var a = {};
alert([1, 2, a, a].uniq()); // [1, 2, {}]
1 2 3 4 5 6 7 8 9 10 11 | Array.prototype.uniq = function () {
for (var i = 0, r = [], s = []; i < this.length; i++) {
for (var j = 0; j < s.length; j ++)
if (s[j] === this[i]) break;
if (j == s.length) {
r.push(this[i]);
s.push(this[i]);
}
}
return r;
};
|
いっそ両方とも実装してみるとか。ダメ?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | Array.prototype.uniq = function(usedObjKey) {
if (typeof(usedObjKey) == 'undefined')
usedObjKey = (typeof(this[0]) == 'object');
var ret = [];
if (usedObjKey) {
for (var i=0, len=this.length, s=[]; i<len; i++) {
if (s.indexOf(this[i]) < 0) {
ret.push(this[i]);
s.push(this[i]);
}
}
}
else
{
for (var i=0, len=this.length, s={}; i<len; i++) {
if (!s[this[i]])
ret.push(this[i]);
s[this[i]] = true;
}
}
return ret;
}
/**
* @site http://developer.mozilla.org/ja/docs/
* Core_JavaScript_1.5_Reference:Global_Objects:Array:indexOf
*/
if (!Array.prototype.indexOf) {
Array.prototype.indexOf = function(elt /*, from*/) {
var len = this.length;
var from = Number(arguments[1]) || 0;
from = (from < 0) ? Math.ceil(from) : Math.floor(from);
if (from < 0)
from += len;
for (; from<len; from++)
if (from in this && this[from] === elt)
return from;
return -1;
};
}
|
ObjectやFunctionにも対応してみた。firefox2.0.0.4+Firebugで確認。 なんというかtoJSONString()の手抜き実装みたいだ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | Array.prototype.uniq=function(){
var h={};
var tostr=function(obj){
if(typeof obj == "object"){
var str="";
for(var p in obj){
str+=p+":"+arguments.callee(obj[p]);
}
return "{"+str+"}";
}
return obj;
}
for(var i=0,h={},l=this.length,r=[]; chk=tostr(this[i]),i<l; i++){
if(!h[chk]===true)r.push(this[i]);
h[chk]=true;
}
return r;
}
// -------------------
var a=[1,2,[3,4],6,2,3,{},{},[4,3]
,function(){},function(a){},function(){},function(){return this;}
,{"a":"test1"}
,{"a":"nest","b":{"c":"nest2"}}
,{"a":"nest2","b":{"c":"nest3"}}
,{"a":"nest","b":{"c":"nest2"}}
,{"a":"test1"}
,{"a":"test3"}
,[5,12,4],[4,3],[5]
];
a.uniq();
//[1, 2, [3, 4], 6, 3, Object, [4, 3], function(), function(), function()
//, Object a=test1, Object a=nest b=Object, Object a=nest2 b=Object, Object a=test3
//, [5, 12, 4], [5]]
|





id:amachang
#450()
[
JavaScript
]
Rating0/0=0.00
Rating0/0=0.00-0+
2 replies [ reply ]