数组去重复方法总结
function repArr (oldArr) {
var newArr=[oldArr[0 ]];
for (var i=0 ;i<oldArr.length;i++){
var repeat=false ;
for (var j=0 ;j<newArr.length;j++){
if (oldArr[i]===newArr[j]){
repeat = true ;
break ;
}
}
if (!repeat){
newArr.push(oldArr[i])
}
}
return newArr;
}
var oldArr=[0 ,1 ,2 ,3 ,1 ,2 ]
console.log(repArr(oldArr))
function repArr (oldArr) {
var reoldArr=oldArr.sort();
var newArr=[oldArr[0 ]]
for (var i=0 ;i<reoldArr.length;i++){
if (reoldArr[i]!=newArr[newArr.length-1 ]){
newArr.push(reoldArr[i])
}
}
return newArr;
}
var oldArr=[0 ,1 ,2 ,3 ,1 ,2 ]
console.log(repArr(oldArr))
方法三 思路: 利用对象属性存在的特性,如果没有该属性则存入新数组。
function repArr (oldArr) {
var newArr = [] ;
var obj = {} ;
for (var i =0 ; i <oldArr. length ; i ++){
if( !obj[oldArr[i]] ){
obj[oldArr[i]] = 1 ;
alert(obj)
newArr.push(oldArr[i]);
}
}
return newArr;
}
var oldArr=[0 ,1 ,2 ,3 ,1 ,2 ]
console. log (repArr(oldArr));
方法四 思路: 利用数组原型对象上的includes方法。
function repArr (oldArr) {
var newArr = [] ;
for (var i =0 ; i <oldArr. length ; i ++){
if( !newArr.includes(oldArr[i]) ){ // 如果newArr新数组包含当前循环item
newArr.push(oldArr[i]);
}
}
return newArr;
}
var oldArr=[0 ,1 ,2 ,3 ,1 ,2 ]
console. log (repArr(oldArr));
方法五 思路: 利用数组原型对象上的 filter 和 includes方法。
function repArr (oldArr) {
var newArr = [];
res = oldArr.filter(function (item) {
return newArr.includes(item) ? '' : newArr.push(item);
});
return newArr;
}
var oldArr=[0 ,1 ,2 ,3 ,1 ,2 ]
console.log(repArr(oldArr));
方法六 思路: 利用数组原型对象上的 forEach 和 includes方法。
function repArr (oldArr) {
var newArr = [];
oldArr.forEach (function (item) {
newArr.includes(item) ? '' : newArr.push(item);
});
return newArr;
}
var oldArr=[0 ,1 ,2 ,3 ,1 ,2 ]
console.log(repArr(oldArr));
方法七 思路: 利用数组的indexOf下标属性来查询。
function repArr (oldArr) {
var newArr = [] ;
for (var i =0 ; i <oldArr. length ; i ++){
if(newArr.indexOf(oldArr[i]) == -1 ){
newArr.push(oldArr[i]);
}
}
return newArr;
}
var oldArr=[0 ,1 ,2 ,3 ,1 ,2 ]
console. log (repArr(oldArr));
方法八 思路: 利用数组原型对象上的 splice 方法。
function repArr (oldArr) {
var i ,
j ,
len = oldArr. length ;
for (i = 0 ; i < len; i ++){
for(j = i + 1 ; j < len; j++){
if(oldArr[i] == oldArr[j]){
oldArr.splice(j,1 );
len--;
j--;
}
}
}
return oldArr;
}
var oldArr=[0 ,1 ,2 ,3 ,1 ,2 ]
console. log (repArr(oldArr));
方法九 利用数组原型对象上的 lastIndexOf 方法。
function repArr (oldArr) {
var newArr = [];
for (var i=0 ; i<oldArr.length; i++){
newArr.lastIndexOf(oldArr[i]) !== -1 ? '' : newArr.push(oldArr[i]);
}
return newArr;
}
var oldArr=[0 ,1 ,2 ,3 ,1 ,2 ]
console.log(repArr(oldArr));
数组的长度比较大的时候,不同方法的执行时间长短不同。
方法八的执行速度相对较慢。大家可以自己测试下。
var time3 = new Date().getTime();
// 不同方法
...
console.log('3所花时间: ' + (new Date().getTime() - time3));