var arr =[2,4,5,2,4,7,9,1,9,500];functiongetUniqueArray(){// 1.使用Array.form() 将set转化为数组var result = Array.from(newSet(arr));// 2.使用展开运算符 将set转化为数组var result =[...newSet(arr)];}
方法三 使用数组的forEach()遍历,indexOf()查找
var result =[];
arr.forEach(item=>{if(result.indexOf(item)===-1){
result.push(item)}})
方法四 ES6 filter和indexOf()特性
var result = arr.filter((item,index)=>{return arr.indexOf(item)=== index;})
方法五 ES6 reduce()
// 特点:reduce循环的是上一次循环的结果var result = arr.reduce((pre,item)={return pre.includes(item)? pre :[...pre, item]},[]);
方法六 利用对象key值唯一的特点
var result ={};// 把数组每一项取出来作为对象的key值
arr.forEach((item,index)=>{
result[arr[index]]="s";});// 将key值取出 并利用 ~~ 取整方法将字符串变为数字
result = Object.keys(result).map(item=>~~ item);
方法七 原始的循环遍历:两次for循环
var result =[];var flag;for(let i =0; i < arr.length; i++){
flag =false;for(let j = i +1; j < arr.length; j++){
flag =false;// 如果本次遍历的值和上一次遍历的相等,则舍弃if(arr[i]=== arr[j]){
flag =true;};};// 如果不一样则放入数组if(!flag){
result.push(arr[i]);}}
方法八 利用数组排序
var result =[];var temp = arr.sort();// 判断相邻两个数值是否一样for(let i =0; i < temp.length; i ++){if(temp[i]!== temp[i+1]){
result.push(temp[i])}}
02 数组降维
方法一 数组字符串化
let arr =[[123456],[333],789];
arr +="",
arr.split(",");
console.log(arr)// ['123456', '333', '789']
let arr =[[123456],[333],789];let result =[];for(let i =0; i < arr.length; i ++){if(arr[i].constructor == Array){// 则使用concat方法拼接数组// 给result重新赋值一份,因为concat返回的是新的数组,并未改变原数组的值
result = result.concat(arr[i])}else{// 则正常push
result.push(arr[i])};};
console.log(result)// [123456, 333, 789]
方法四 利用扩展运算符
// 扩展运算符相当于将数组拆分成最小单位let arr =[[123456],[333],789];let result =[];
result =[].concat(...arr);
console.log(result);// [123456, 333, 789]
方法五 利用apply
// apply会把数组拆分成一个个单独的数组,依次传递给concat方法let arr =[[123456],[333],789];let result =[];
result =Array.prototype.concat.apply(result,arr);
console.log(result);// [123456, 333, 789]