[bo]以下是引用 [un]lmhllr[/un] 在 2008-3-28 11:49 的发言:[/bo]
/**
++ 方法:Array.remove(dx)
++ 功能:删除数组元素.
++ 参数:dx删除元素的下标.
++ 返回:在原数组上修改数组
++
++ 使用:a = ['1','2','3','4','5'];
++ alert("elements: "+a+"\nLength: "+a.lengt ...
即时是按你的思路遍历的来做,这样的效率也太低了~~~~复杂度是O(n)
完全可以以移动数组的方式来做(即从第dx位开始移动)
另外,对于楼主的问题,没有什么解决方法,也不要去删除元素了,Prototype的做法就是,重新把非重复的元素赋值给一个新数组,简单用Prototype的语法,即
var new_arr=[];
arr.each(function(p) {
new_arr.concat(new_arr.include(p)?[]:[p]);
});
而Prototype的相关实现方法如下
var Enumerable = {
each: function(iterator) {
var index = 0;
try {
this._each(function(value) {
try {
iterator(value, index++);
} catch (e) {
if (e != $continue) throw e;
}
});
} catch (e) {
if (e != $break) throw e;
}
return this;
},
include: function(object) {
var found = false;
this.each(function(value) {
if (value == object) {
found = true;
throw $break;
}
});
return found;
},
inject: function(memo, iterator) {
this.each(function(value, index) {
memo = iterator(memo, value, index);
});
return memo;
},
// more sth else
}
Object.extend(Array.prototype, Enumerable);
if (!Array.prototype._reverse)
Array.prototype._reverse = Array.prototype.reverse;
Object.extend(Array.prototype, {
_each: function(iterator) {
for (var i = 0, length = this.length; i < length; i++)
iterator(this[i]);
},
// more sth else
uniq: function() {
return this.inject([], function(array, value) {
return array.include(value) ? array : array.concat([value]);
});
},
//more sth else.
});
更多细节请参加Prototype 1.5源码