# Javascript 更新 JavaScript 數組的 uniq 方法

Array.prototype.uniq = function() {
var resultArr = [],
returnArr = [],
origLen = this.length,
resultLen;

function include(arr, value) {
for (var i = 0, n = arr.length; i < n; ++i){
if (arr[i] === value) {
return true;
}
}

return false;
}

resultArr.push(this[0]);
for (var i = 1; i < origLen; ++i) {
if (include(resultArr, this[i])) {
returnArr.push(this[i]);
} else {
resultArr.push(this[i]);
}
}

resultLen = resultArr.length;
this.length = resultLen;
for (var i = 0; i < resultLen; ++i){
this[i] = resultArr[i];
}

return returnArr;
}按照他的說法：“這種解法在整個過程對原有數組的改變只有兩次，效率比其他兩種高了2個數量級左右！”，我實測了下此函數的效率，的確如此（測試連接點這裡）。

Array.prototype.uniq = function() {
var tmp = new Array;
var length = this.length;

for(var i = 0; i < length; i++) {
var push = true;
for(var j = i + 1; j < length; j++) {
if(this[j] === this[i]) {
push = false;
break;
}
}

if(push) {
tmp.push(this[i])
}
}

this.length = tmp.length;
for (var i = 0; i < tmp.length; i++) {
this[i] = tmp[i];
}

return tmp;
}由同一個頁面測試所得，效率還是 Lazy 兄弟的稍許快些。經過一點思考以後，我有了些一點點我的心得：

Lazy 兄弟的結論：

Tags Index: