多种js数组去重的方法
2016-06-14 本文已影响182人
Top_Chenxi
require(['jquery'], function($) {
// 数组去重
// 获取数组
function getArray(length) {
var tmpArray = [];
for (var i = 0; i < length; i++) {
tmpArray.push(Math.floor(Math.random() * 10 + 1));
}
return tmpArray;
}
/*
开始介绍下jquery的去重方法,简单粗暴
*/
var myArray = getArray(20);
console.log("排序前:", myArray);
console.log("排序后:", $.unique(myArray));
/*
方法一(慢到没朋友)
1.构建一个新的数组存放结果
2.for循环中每次从原数组中取出一个元素,用这个元素循环与结果数组对比
3.若结果数组中没有该元素,则存到结果数组中
*/
function unique_method1(array) {
var tmpArray = [array[0]];
for (var i = 1, len = array.length; i < len; i++) {
var flag = false;
for (var j = 0, tmpLen = tmpArray.length; j < tmpLen; j++) {
if (array[i] == tmpArray[j]) {
flag = true;
break;
}
}
if (!flag) {
tmpArray.push(array[i])
}
}
return tmpArray;
}
var myArray = getArray(20);
console.log("排序前:", myArray);
console.log("排序后:", unique_method1(myArray));
/*
方法二:(高效)
1.创建一个新的数组存放结果,创建一个空对象来记录存放
2.for循环时,每次取出一个元素与记录存放进行对比,如果这个元素不重复,
则把它存放到结果数组中,并在对象中记录下来。
*/
function unique_method2(array) {
var tmpArray = [];
var tmpObj = {};
for (var i = 0, len = array.length; i < len; i++) {
if (!tmpObj[array[i]]) {
tmpArray.push(array[i]);
tmpObj[array[i]] = 1;
}
}
return tmpArray;
}
var myArray = getArray(20);
console.log("排序前:", myArray);
console.log("排序后:", unique_method2(myArray));
/*
方法三(高效,但改变顺序)
1.先将原数组进行排序
2.检查原数组中的第i个元素 与 结果数组中的最后一个元素是否相同,
因为已经排序,所以重复元素会在相邻位置
3.如果不相同,则将该元素存入结果数组中
*/
function unique_method3(array) {
array.sort();
var tmpArray = [array[0]];
for (var i = 1, len = array.length; i < len; i++) {
if (array[i] !== tmpArray[tmpArray.length - 1]) {
tmpArray.push(array[i]);
}
}
return tmpArray;
}
var myArray = getArray(20);
console.log("排序前:", myArray);
console.log("排序后:", unique_method3(myArray));
})