数组常用方法与常见算法

常用方法

  1. pop() push()
  2. shift() unshift()
  3. forEach() map()
  4. slice(start,end) splice(start,count,args) split(‘’)
  5. find(n=>n>3) findIndex filter
  6. include
  7. every() some()

数组去重的 n 种方法

  1. 使用 es6 的方法来实现
1
2
3
4
5
6
7
8
9
10
//第一种方法
function unique(array){
return Array.from(new Set(array))
}
//第二种 运用拓展运算符
function unique(array){
return [...new Set(array)];
}
//第三种 箭头函数
const unique = a => [...new Set(array)];
  1. 使用 filter 方法来实现
1
2
3
4
5
6
7
8
//未排序
let res = array.filter(function(item,index,array){
return array.indexOf(item) === index;
})
//已排序
let res = array.concat().sort().filter(function(item,index,array){
return !index || item!==array[index-1];
})
  1. 常规的方法-利用 indexOf
1
2
3
4
5
6
7
var res=[];
for(var i = 0, len = array.length; i<len; i++){
var current = array[i];
if(res.indexOf(current)===-1){
res.push(current);
}
}
  1. 常规的方法-排序
    这里需要注意一下 array.concat()的作用是为了复制一个新数组出来 这样的话就不会改变原有数组的值了。
1
2
3
4
5
6
7
8
9
10
var res = [];
//使用.concat()是为了复制一个新数组出来 这样的话就不会改变原有数组的值了。
var sortedArray = array.concat().sort();
var seen;
for(var i = 0,len = sortedArray.length; i<len; i++){
if(!i || seen !== sortedArray[i]){
res.push(sortedArray[i]);
}
seen = sortedArray[i];
}

数组扁平化

  1. 比较常规的递归
1
2
3
4
5
6
7
8
9
10
11
    function flatten(arr){
var result=[];
for(let i = 0,len = arr.length; i < len; i++){
if(Array.isArray(arr[i])){
result = result.concat(flatten(arr[i]))
}else{
result.push(arr[i]);
}
}
return result;
}
  1. reduce
1
2
3
4
5
function flatten(arr){
return arr.reduce((prev,next)=>(
prev.concat(Array.isArray(next)?flatten(next):next)
),[])
}
  1. some+…
1
2
3
4
5
6
function flatten(arr) {
while (arr.some(item => Array.isArray(item))) {
arr = [].concat(...arr);
}
return arr;
}

字符串反转

1
2
str='abc';
res = str.split('').reverse().join('')