# 数组

# String

const name = 'Zelda';
const letters = [...name]; // 'Z', 'e', 'l', 'd', 'a'
1
2

# 扁平化

# toString

let arr=[1,[[2],[3,4]]]
console.log(arr.toString().split(",").map(item=>+item));//[1,2,3,4]
1
2

# flatten函数

function flatten(arr){
    let result=[];
    for(let i=0;i<arr.length;i++){
        if(Array.isArray(arr[i])){
            result=result.concat(flatten(arr[i]))
        }else{
            result.push(arr[i])
        }
    }
    return result;
}
1
2
3
4
5
6
7
8
9
10
11

# reduce

function flatten(arr){
    return arr.reduce((pre,current)=>{
        return pre.concat(Array.isArray(current)?flatten(current):current)
    },[])
}
1
2
3
4
5

# 数组去重

function noRepeat(arr){
    return [...new Set(arr)];
}
1
2
3

# 数组最大值

function arrayMax(arr){
    return Math.max(...arr);
}
1
2
3

# 返回以size为长度的数组分割的原数组

function chunk(arr,size){
    return Array.from({
        length:Math.ceil(arr.length/size)
    },(v,i)=>{
        arr.slice(i*size,i*size+size)
    })
}
1
2
3
4
5
6
7

# 检查数组中某元素出现的次数

function countRepeat(arr,value){
    return arr.reduce((a,v)=>v===value?a+1:a+0,0)
}
1
2
3

# 数组所有元素出现的个数

function countAllRepeat(arr){
   return arr.reduce((prev,next)=>{
       prev[next] = (prev[next] + 1) || 1; 
        return prev; 
   },{}) 
}
1
2
3
4
5
6

# 对比俩个数组并返回其中不同的元素

function compareArr(arr1,arr2){
    return arr1.filter(v=>!arr2.includes(v))
}
1
2
3

# 对比俩个数组并返回其中相同的元素

function compareArr(arr1,arr2){
    return arr1.filter(v=>arr2.includes(v))
}
1
2
3

# 从右删除n个元素

function deleteRight(arr,n){
    return n<arr.length?arr.slice(0,arr.length-n):[]
}
1
2
3

# 返回数组中第n个元素

function nthElement(arr, n = 0) {
  return (n >= 0 ? arr.slice(n, n + 1) : arr.slice(n))[0]
}
1
2
3

# 数组乱排

function shuffle(arr) {
  let array = arr
  let index = array.length

  while (index) {
    index -= 1
    let randomInedx = Math.floor(Math.random() * index)
    let middleware = array[index]
    array[index] = array[randomInedx]
    array[randomInedx] = middleware
  }

  return array
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14