數(shù)組去重方法瞎惫,萬能用法
Array.prototype.arrUniq = function() {
var temp, arrVal,
array = this,
arrClone = array.concat(), //克隆數(shù)組
typeArr = { //數(shù)組原型
'obj': '[object Object]',
'fun': '[object Function]',
'arr': '[object Array]',
'num': '[object Number]'
},
ent = /(\u3000|\s|\t)*(\n)+(\u3000|\s|\t)*/gi; //空白字符正則
//把數(shù)組中的object和function轉(zhuǎn)換為字符串形式
for (var i = arrClone.length; i--;) {
arrVal = arrClone[i];
temp = Object.prototype.toString.call(arrVal);
if (temp == typeArr['num'] && arrVal.toString() == 'NaN') {
arrClone[i] = arrVal.toString();
}
if (temp == typeArr['obj']) {
arrClone[i] = JSON.stringify(arrVal);
}
if (temp == typeArr['fun']) {
arrClone[i] = arrVal.toString().replace(ent, '');
}
}
//去重關(guān)鍵步驟
for (var i = arrClone.length; i--;) {
arrVal = arrClone[i];
temp = Object.prototype.toString.call(arrVal);
if (temp == typeArr['arr']) arrVal.arrUniq(); //如果數(shù)組中有數(shù)組,則遞歸
if (arrClone.indexOf(arrVal) != arrClone.lastIndexOf(arrVal)) { //如果有重復的,則去重
array.splice(i, 1);
arrClone.splice(i, 1);
} else {
if (Object.prototype.toString.call(array[i]) != temp) {
//檢查現(xiàn)在數(shù)組和原始數(shù)組的值類型是否相同窥妇,如果不同則用原數(shù)組中的替換,原因是原數(shù)組經(jīng)過了字符串變換
arrClone[i] = array[i];
}
}
}
return arrClone;
}
//用法
array.arrUniq();
用在angularJS娩践,追蹤某一項特定值
function unique(arr,track) {
var result = [], hash = {};
for (var i = 0, elem; (elem = arr[i]) != null; i++) {
if (!hash[elem[track]]) {
result.push(elem);
hash[elem[track]] = true;
}
}
return result;
}
//用法
unique(array,'id');
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者