一、遍历数组法
这种方法是最简单的一种。
它是先创建一个新的数组,然后遍历要去重的数组当这个值不在这个数组的时候(indexOf为-1),就加入到这个新的数组中
例如:
var arr = [1, 1, 2, 2, 3, 3, 4, 4, 5, 7, 7, 7, 7];
var brr = []; //新建一个数组
for (let i = 0; i < arr.length; i++) { //遍历要去重的数组
if (brr.indexOf(arr[i]) == -1) { //判断这个新的数组中是否有这个数,如果没有push进新数组
brr.push(arr[i]);
}
}
console.log(brr);
二、利用splice直接在原数组进行操作
这种方法是第一种的进阶法,
他用双重循环,遍历自身,第一层循环是从0到arr.length,第二层循环是i+1到arr.length,如果有重复的就删除,因为每删除一次,后面的数会填补前一个的,但是,在他不会在被循环到,所以每一次要j--一次,确保没有重复的
var arr = [1, 1, 2, 2, 3, 3, 4, 4, 5, 7, 7, 7, 7];
for (let i = 0; i < arr.length; i++) {
for (let j = i + 1; j < arr.length; j++) {
if (arr[i] === arr[j]) {
arr.splice(j, 1);
j--;
}
}
}
console.log(arr);
三、es6实现去重
这种方法是es6,提供的了新的数据结构Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。
var arr = [1, 1, 2, 2, 3, 3, 4, 4, 5, 7, 7, 7];
console.log(new Set(arr));
四、includes方法
includes()
方法用来判断一个数组是否包含一个指定的值,根据情况,如果包含则返回 true,否则返回false。
这种方法和第一种差不多,都是新建一个数组,不过判断方式不一样。
var arr = [1, 1, 2, 2, 3, 3, 4, 4, 5, 7, 7, 7, 7];
var crr = [];
for (let i = 0; i < arr.length; i++) {
if (!crr.includes(arr[i])) {
crr.push(arr[i]);
}
}
console.log(crr);
五、排序后相邻去除法
这种方法是先 给传入数组排序,排序后相同值相邻,然后遍历时,新数组只加入不与前一值重复的值。但是缺点是会打乱原来数组的顺序
var arr = [1, 1, 7, 7, 6, 5, 2, 2, 3, 3, 4, 4, 5, 7, 7, 7, 7]
arr.sort();
console.log(arr); //[1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 7, 7, 7, 7, 7, 7]
var temp = [arr[0]];
for (var i = 1; i < arr.length; i++) {
if (arr[i] !== temp[temp.length - 1]) {
temp.push(arr[i]);
}
}
console.log(temp);
判断字符串中出现次数最多的字符,和次数
function findMore(str) {
// 将字符串"按每个字符"分割成数组
let arr = str.split("");
let obj = {}; //定义一个对象
//遍历数组
arr.forEach((v) => {
if (obj[v]) {
//判断这个对象中是否存在这对象,
obj[v]++; //如果存在,则加加
} else {
obj[v] = 1; //如果不存在,加入,并赋值为1
}
});
// 定义两个变量,一个是出现最多的字符,一个是出现了多少次
let num,
max = 0;
//对象循环方法 for in
for (let i in obj) {
if (obj[i] > max) {
max = obj[i];
num = i;
}
}
return `出现次数最多的字符是:${num},共出现了${max}次`;
}
var str = "hdjkldksdjfklslasdhaaaasd";
console.log(findMore(str));