数组去重
虽说去重问题在开发中基本不用前端去处理,但前端依然要熟练使用,而且去重是面试中的一个热点.所以,感兴趣的朋友可以一起学习!
第一种方法–利用数组indexOf()方法
Array.prototype.only = function() {
var arr = this;
var newArr = [];
for (var i = 0; i < arr.length; i++) {
//判断在新数组中存不存在arr[i],不存在则将值添加到新数组
if (newArr.indexOf(arr[i]) == -1) {
newArr.push(arr[i]);
}
}
return newArr;
}
var arr = [3, 4, 5, 4, 3, 2, 1, 5, 6];
console.log(arr.unique());
第二种方法–利用对象的属性
Array.prototype.only = function() {
var arr = this;
var newArr = [];
var obj = {};
for (var i = 0; i < arr.length; i++) {
//判断对象中是否有arr[i]这个属性,不存在 则添加到新数组,并在对象中设置改属性的值为1--为下次判断做准备;
if (!obj[arr[i]]) {
newArr.push(arr[i]);
obj[arr[i]] = 1;
}
}
return newArr;
}
var arr = [7, 4, 5, 8, 3, 2, 5, 5, 6];
console.log(arr.only());
第三种方法–利用数组的排序–sort()方法
Array.prototype.only = function() {
var arr = this;
var arr1 = arr.sort();
var newArr = [arr1[0]];
for (var i = 1; i < arr1.length; i++) {
//判断arr1的第i个值,不等于新数组的前一个值,则把这个值追加到新数组
if (arr1[i] != newArr[newArr.length - 1]) {
newArr.push(arr1[i]);
}
}
return newArr;
}
var arr = [7, 10, 5, 11, 3, 2, 5, 5, 6];
console.log(arr.only());
第四种方法–利用双重for循环
Array.prototype.only = function() {
var arr = this;
var newArr = [arr[0]];
for (var i = 0; i < arr.length; i++) {
var flag = false;
for (var j = 0; j < newArr.length; j++) {
//比较两个数组中的数值是否相等,如果相等则跳出内层循环
if (arr[i] == newArr[j]) {
flag = true;
break;
}
}
if (!flag) {
newArr.push(arr[i]);
}
}
return newArr;
}
var arr = [20, 10, 5, 11, 5, 2, 5, 5, 6];
console.log(arr.only());