数组去重
方式一:通过Set实现
ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。
function unique(arr) {
return Array.from(new Set(arr));
}
方法二:通过for嵌套实现
function unique(arr){
for(var i=0; i<arr.length; i++){
for(var j=i+1; j<arr.length; j++){
if(arr[i]==arr[j]){ //splice方法删除
arr.splice(j,1);
j--;
}
}
}
return arr;
}
方法三:通过includes实现
function unique(arr) {
var array =[];
for(var i = 0; i < arr.length; i++) {
if( !array.includes( arr[i]) ) { // 也可以用array.indexOf(arr[i]) === -1,原理一样
array.push(arr[i]);
}
}
return array;
}
找出数组中的重复项
方法一:
function duplicates(arr) {
//声明两个数组,a数组用来存放结果,b数组用来存放arr中每个元素的个数
var a = [],res = [];
//遍历arr,如果以arr中元素为下标的的b元素存在,则该b元素加1,否则设置为1
for(var i = 0; i < arr.length; i++){
if(!a[arr[i]]){
a[arr[i]] = 1;
continue;
}
a[arr[i]]++;
}
//遍历b数组,将其中元素值大于1的元素下标存入a数组中
for(var i = 0; i < a.length; i++){
if(a[i] > 1){
res.push(i);
}
}
return res;
}
方法二:
function duplicates(arr) {
var a = [];
for (var i = 0; i < arr.length - 1; i++) {
for (var j = i + 1; j < arr.length; j++) {
if (arr[i] == arr[j] && a.indexOf(arr[i]) == -1) {
a.push(arr[i]);
}
}
}
return a.sort();
}
扁平化数组
方法一:递归调用
function flatten(arr){
var res = [];
for(var i=0;i<arr.length;i++){
if(Array.isArray(arr[i])){
res = res.concat(flatten(arr[i]));
}else{
res.push(arr[i]);
}
}
return res;
}
方法二:flat方法
arr.flat(n) //其中n为数组维度
// 若不管数组的维度是多少,都转换成一维数组,参数可以为Infinity
方法三:ES6扩展运算符
function flatten(arr) {
// some方法满足条件返回true,用于判断数组中是否还存在数组
while (arr.some(item => Array.isArray(item))) {
arr = [].concat(...arr);
}
return arr;
}
方法四:正则替换
let str = JSON.stringify(arr);
str = str.replace(/(\[|\])/g, '');
str = '[' + str + ']';
arr = JSON.parse(str);
方法五:reduce
function flatten(arr) {
return arr.reduce((res, cur) => {
return res.concat(Array.isArray(cur)?flatten(cur):cur);
}, []);
}