第一個和第二個,都是對新數組或新json進行操做,而第三個是對原數組自己進行indexOf。
第一個是用新數組的indexOf來判斷是否有重複元素,而第二個是經過nHash[item]來判斷是否存在。
var array = [1, 2, 3, 2, 1];
Array.prototype.unique1 = function () {
var nArray = []; // 新建一個數組
console.log(this, 'this的值');
for (var i = 0, len = this.length; i < len; i++) { //遍歷當前數組
var item = this[i];
//若是當前數組的第i沒有保存在臨時數組中,那麼將當前項push到臨時數組裏面
if ( nArray.indexOf(item) == -1 ) { // 數組經過經過indexOf()來判斷這個item是否存在這個新數組中
nArray.push(item);
};
};
return nArray; // 返回這個新數組
}
console.log(array, array.unique1());
var array2 = [1, 2, 3, 2, 1];
Array.prototype.unique2 = function() {
var nArray = [], nHash = {}; // n爲hash表,r爲臨時數組
for (var i = 0, len = this.length; i < len; i++) {
var item = this[i];
console.log(nHash[item]); // undefined 3, true 2
if (!nHash[item]) { // 若是hash表中沒有當前項 對象經過nHash[item]即value爲undefined || true來判斷是否存在。
nHash[item] = true; // 存入hash表
nArray.push(item); //把當前數組的當前項push到臨時數組裏面
};
};
return nArray;
};
console.log(array2.unique2());
var array3 = [1, 2, 3, 2, 1];
Array.prototype.unique3 = function() {
var nArray = [];
nArray.push(this[0]);
for (var i = 1, len = this.length; i < len; i++) { // 從一開始減小一次循環,從第二項開始遍歷
var item = this[i];
if (this.indexOf(item) == i) { // 對原數組自身進行操做
//若是當前數組的第i項在當前數組中第一次出現的位置不是i,
//那麼表示第i項是重複的,忽略掉。不然存入結果數組
nArray.push(item);
};
};
return nArray;
};
console.log(array3.unique3());