整理 javascript 去除数组中重复项的几种方法
2013-12-12 16:18
525 查看
<script>
//方法一(说明:只限定数字,不支持字符)
function regArrayA(arr) {
var array = arr;
var o = {};
for (var i = 0; i < array.length; i++) {
o[array[i]] = array[i];
}
array = [];
for (var el in o) {
if (el == o[el]) {
array.push(el - 0);
}
}
return array;
}
//方法二:(有BUG)
function regArrayB(arr) {
return arr.reverse().join(",").match(/([^,]+)(?!.*\1)/ig).reverse();
}
//方法三:
function regArrayC(arr) {
var obj = {}, temp = [];
for (var i = 0; i < arr.length; i++) {
if (!obj[arr[i]]) {
temp.push(arr[i]);
obj[arr[i]] = true;
}
}
return temp;
}
//方法四:
function regArrayD(arr) {
var str = [];
for (var i = 0; i < arr.length; i++) {
!RegExp(arr[i], "g").test(str.join(",")) && (str.push(arr[i]));
}
return str;
}
//方法五
function regArrayE(arr) {
var o = {}, newArr = [];
for (var i = 0; i < arr.length; i++) {
if (typeof (o[arr[i]]) == "undefined") {
o[arr[i]] = "";
}
}
for (var j in o) {
newArr.push(j)
}
return newArr;
}
//方法六
function regArrayF(arr) {
var a = [], b = [];
for (var prop in arr) {
var d = arr[prop];
if (d === a[prop]) continue; //防止循环到prototype
if (b[d] != 1) {
a.push(d);
b[d] = 1;
}
}
return a;
}
//方法七(支持不同的类型区分)
function regArrayG(array) {
var ret = [], record = {}, it, tmp, obj = "__object__", bak = [], i, len;
var type = {
"number": function (n) { return "__number__" + n; },
"string": function (n) { return "__string__" + n; },
"boolean": function (n) { return "__boolean__" + n; },
"undefined": function (n) { return "__undefined__"; },
"object": function (n) {
return n === null ? "__null__" : obj in n ? n[obj] : (n[obj] = obj + bak.push(n));
}
};
for (i = 0, len = array.length; i < len; i++) {
it = array[i]; tmp = type[typeof it](it);
if (!(tmp in record)) { ret.push(it); record[tmp] = true; }
}
for (i = 0, len = bak.length; i < len; delete bak[i++][obj]) { }
return ret;
};
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 'a', 'b', 'c', 'a', 'b', -1, -2, -3, -2, -1, 0.1, 0.2, 0.3, 0.2, 0.1, '1', '2', '3', '3', '4'];
alert("regArrayA:" + regArrayA(arr));
alert("regArrayB:" + regArrayB(arr));
alert("regArrayC:" + regArrayC(arr));
alert("regArrayD:" + regArrayD(arr));
alert("regArrayE:" + regArrayE(arr));
alert("regArrayF:" + regArrayF(arr));
alert("regArrayG:" + regArrayG(arr));
</script>
//方法一(说明:只限定数字,不支持字符)
function regArrayA(arr) {
var array = arr;
var o = {};
for (var i = 0; i < array.length; i++) {
o[array[i]] = array[i];
}
array = [];
for (var el in o) {
if (el == o[el]) {
array.push(el - 0);
}
}
return array;
}
//方法二:(有BUG)
function regArrayB(arr) {
return arr.reverse().join(",").match(/([^,]+)(?!.*\1)/ig).reverse();
}
//方法三:
function regArrayC(arr) {
var obj = {}, temp = [];
for (var i = 0; i < arr.length; i++) {
if (!obj[arr[i]]) {
temp.push(arr[i]);
obj[arr[i]] = true;
}
}
return temp;
}
//方法四:
function regArrayD(arr) {
var str = [];
for (var i = 0; i < arr.length; i++) {
!RegExp(arr[i], "g").test(str.join(",")) && (str.push(arr[i]));
}
return str;
}
//方法五
function regArrayE(arr) {
var o = {}, newArr = [];
for (var i = 0; i < arr.length; i++) {
if (typeof (o[arr[i]]) == "undefined") {
o[arr[i]] = "";
}
}
for (var j in o) {
newArr.push(j)
}
return newArr;
}
//方法六
function regArrayF(arr) {
var a = [], b = [];
for (var prop in arr) {
var d = arr[prop];
if (d === a[prop]) continue; //防止循环到prototype
if (b[d] != 1) {
a.push(d);
b[d] = 1;
}
}
return a;
}
//方法七(支持不同的类型区分)
function regArrayG(array) {
var ret = [], record = {}, it, tmp, obj = "__object__", bak = [], i, len;
var type = {
"number": function (n) { return "__number__" + n; },
"string": function (n) { return "__string__" + n; },
"boolean": function (n) { return "__boolean__" + n; },
"undefined": function (n) { return "__undefined__"; },
"object": function (n) {
return n === null ? "__null__" : obj in n ? n[obj] : (n[obj] = obj + bak.push(n));
}
};
for (i = 0, len = array.length; i < len; i++) {
it = array[i]; tmp = type[typeof it](it);
if (!(tmp in record)) { ret.push(it); record[tmp] = true; }
}
for (i = 0, len = bak.length; i < len; delete bak[i++][obj]) { }
return ret;
};
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 'a', 'b', 'c', 'a', 'b', -1, -2, -3, -2, -1, 0.1, 0.2, 0.3, 0.2, 0.1, '1', '2', '3', '3', '4'];
alert("regArrayA:" + regArrayA(arr));
alert("regArrayB:" + regArrayB(arr));
alert("regArrayC:" + regArrayC(arr));
alert("regArrayD:" + regArrayD(arr));
alert("regArrayE:" + regArrayE(arr));
alert("regArrayF:" + regArrayF(arr));
alert("regArrayG:" + regArrayG(arr));
</script>
相关文章推荐
- JavaScript基于对象去除数组重复项的方法
- JavaScript合并两个数组并去除重复项的方法
- JavaScript合并两个数组并去除重复项的方法
- Javascript/jQuery关于JSON或数组集合的几种循环方法
- 去除list集合中重复项的几种方法
- 数组去掉重复项的几种方法
- 去除list集合中重复项的几种方法
- JavaScript数组去重的几种方法效率测试
- JavaScript数组去重的几种方法效率测试
- JavaScript去除数组里重复值的方法
- JavaScript数组去重的几种方法
- JavaScript几种数组去掉重复值的方法推荐
- JavaScript中数组去除重复的三种方法
- js去除数组重复项,删除重复数据的方法
- JS简单去除数组中重复项的方法
- JavaScript数组合并几种方法
- JavaScript数组去重的几种方法
- Android 去除list集合中重复项的几种方法
- javascript 数组常用方法整理
- 详解JavaScript数组和字符串中去除重复值的方法