JS-数组和字符串常用方法

239 阅读2分钟

一、数组

push()

数组尾部新增一个或多个元素,并返回新的长度;

unshift()

数组的头部新增一个或多个元素,并返回新的长度;

pop()

删除数组尾部的元素,并返回数组的最后一个元素。

let arr=[1,2,3,4]
console.log(arr.pop()//[4] 
console.log(arr)//[1, 2, 3]

shift()

数组的第一个元素从其中删除,并返回第一个元素的值

let arr=[1,2,3,4]
console.log(arr.shift()//[1] 
console.log(arr)//[2, 3,4]

splice()

向数组中添加/删除项目,然后返回被删除的项目;

删除:splice(startInsdex,length)
新增:splice(startInsdex,0,arr1,arr2...arrN)

slice()

从已有的数组中返回选定的元素,返回一个子数组,不改变原数组;

语法:arrayObject.slice(start,end); start:必需。规定从何处开始选取,end:可选。规定从何处结束选取;

let arr = [1,2,3,4]
console.log(arr.slice(0,2))//[1, 2] 
console.log(arr)//[1, 2, 3, 4]

some()

检索数组对象中是否有符合规则的元素;

let arr = [10,11,12,13]
console.log(arr.some(i=>i<9)) //判断arr中是否有元素小于9  //false
console.log(arr.some(i=>i<11)) //判断arr中是否有元素小于11 //true

forEach()-遍历

改变原数组

map()

return 返回一个新的数组,不改变原数组

reduce

  • 求和
var arr1=[1,2,3,4,5]
var sum=arr1.reduce((pre,cur)=>{
    return pre+cur
})
console.log('sum',sum);
  • 计算数组中某项出现的次数
var arr2=['jack','dora','yee','dora','studio']
var obj=arr2.reduce((pre,cur)=>{
    if(cur in pre){
        pre[cur]++
    }else{
        pre[cur]=1
    }
    return pre
},{})
console.log('obj',obj);

  • 二维数组转为一维数组
var arr3=[[1,2],3,[4,5]]
var newArr=arr3.reduce((pre,cur)=>{
    return pre.concat(cur)
},[])
console.log('newArr',newArr);
  • 多维数组转为一维数组
var arr4=[[1,2],3,[4,[5,6,7]]]
 function format(arr){
    return arr.reduce((pre,cur)=>{
        return pre.concat(Array.isArray(cur)?format(cur):cur) 
    },[])
 }
console.log('多维数组转化newArr1',format(arr4));

  • 对象属性求和
var result=[
    {
        category:'pear',
        total:120
    },
    {
        category:'apple',
        total:20
    },
    {
        category:'banana',
        total:60
    }
]
var sum2=result.reduce((pre,cur)=>{
    return pre+cur.total
},0)
console.log('sum2',sum2);

数组去重

  • ES6 Set
function uniqueArr1(arr){
    return [...new Set(arr)]
}

  • 两次循环
function uniqueArr2(arr){
    for(let i=0,len=arr.length;i<len;i++){
        for(let j=i+1,len=arr.length;j<len;j++){
            if(arr[i]==arr[j]){
                arr.splice(j,1)
                j--;
                len--
            }
        }
    }
    return arr
}

  • indexOf/includes
function uniqueArr3(arr){
    var arr1=[]
    arr.forEach((item,index,arr)=>{
        // if(arr1.indexOf(item)==-1){
        //     arr1.push(item)
        // }
        if(!arr1.includes(item)){
            arr1.push(item)
        }
    })
    return arr1
}

  • filter
function uniqueArr4(arr){
    return arr.filter((el,index)=>{
        return arr.indexOf(el)==index
    })
}

  • reduce
function uniqueArr5(arr){
    var newArr=arr.reduce((pre,cur)=>{
        if(!pre.includes(cur)){
           return pre.concat(cur)
        }else{
           return pre
        }
    },[])
    return newArr
}

二、字符串

slice(start,end)

接收的是起始位置和结束位置(注意:不包括结束位置)

substring(start,end)

接收的是起始位置和结束位置(注意:不包括结束位置)

substr(start,length)

接收的则是起始位置和所要返回的字符串长度。

split()

字符串分割,用于把一个字符串分割成字符串数组;