第一种:
1、使用两层for循环
2、splice() 方法:用于添加或删除数组中的元素。
3、删除相同的值,后续的值往前移
var arr = [1, 2, 3, 3, 2, 'hello', 'hello']; // 1.双层for循环 function unique(arr) { // 第一层for循环控制第一个数 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:下标 1:删除个数 // 后面的往前移一位 j--; } } } } unique(arr); console.log(arr); //[ 1, 2, 3, 'hello' ]
第二种:for循环+indexOf() +push()
思路:建立新数组、使用for循环遍历,再使用indexOf()判断,若为-1则使用push()加入新数组
1、indexOf() 方法:可返回数组中某个指定的元素位置。(如果有多个则返回第一次出现的位置,若找不到则返回-1)
2、push() 方法:可向数组的末尾添加一个或多个元素,并返回新的长度。
// 2. indexOf() var arr = [1, 2, 3, 3, 2, 'hello', 'hello']; function unique(arr) { let newArr = []; //建立新数组 for (let i = 0; i < arr.length; i++) { //for循环遍历 // indexOf()返回-1说明,该值不在数组中 if (newArr.indexOf(arr[i]) === -1) { newArr.push(arr[i]) //将该值加入新数组 } } return newArr //返回新数组 } console.log(unique(arr)); //[ 1, 2, 3, 'hello' ]
第三种:for循环+lastIndexOf() +push()
思路:建立新数组、使用for循环遍历,再使用lastIndexOf()判断,若为-1则使用push()加入新数组
1、lastIndexOf() 方法可返回一个指定的元素在数组中最后出现的位置,从该字符串的后面向前查找。
2、push() 方法:可向数组的末尾添加一个或多个元素,并返回新的长度。
var arr = [1, 2, 3, 3, 2, 'hello', 'hello']; function unique(arr) { let newArr = []; //建立新数组 for (let i = 0; i < arr.length; i++) { //for循环遍历 // lastIndexOf()返回-1说明,该值不在数组中 if (newArr.lastIndexOf(arr[i]) === -1) { newArr.push(arr[i]) //将该值加入新数组 } } return newArr //返回新数组 } console.log(unique(arr)); //[ 1, 2, 3, 'hello' ]
第四种:for循环+include() +push()
思路:建立新数组、使用for循环遍历,再使用include()判断该值是否存在于新数组,若为false则使用push()加入新数组
1、include()用来判断一个数组是否包含一个指定的值,如果是返回 true,否则false。
var arr = [1, 2, 3, 3, 2, 'hello', 'hello']; function unique(arr) { let newArr = []; for (let i = 0; i < arr.length; i++) { // 判断是否存在于新数组中 if (!newArr.includes(arr[i])) { newArr.push(arr[i]) } } return newArr } console.log(unique(arr));
第五种:forEach()遍历+indexOf+push() [同理也可以foreach+lastIndexOf+push]
var arr = [1, 2, 3, 3, 2, 'hello', 'hello']; function unique(arr) { let newArr = []; arr.forEach(function (item) { if (newArr.indexOf(item) === -1) { newArr.push(item) } }) return newArr; } console.log(unique(arr));
第六种:filter()+indexOf/includes()+push()
1、filter():创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。
2、indexOf()/includes():例2、例3有,不做过多阐述。
var arr = [1, 2, 3, 3, 2, 'hello', 'hello']; function unique(arr) { let newArr = []; newArr = arr.filter(function (item) { //三目运算符, return newArr.includes(item) ? "" : newArr.push(item) }) return newArr; } console.log(unique(arr));
第七种:set()+Array.from()
1、Set 对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用
2、Array.from():将一个类数组对象或者可遍历对象转换成一个真正的数组
var arr = [1, 2, 3, 3, 2, 'hello', 'hello']; let set = new Set(arr); //set()数组去重之后变成类数组 console.log(Array.from(set)); //Array.from()将它变为数组