数组API方法

es5: join(), sort(), slice(), splice(), concat(), reverse(), push(),
pop(), shift(), unshift(), forEach(), map(), some(), every(), filter(), reduce(), indexOf(), lastIndexOf(), 
es6: Array.form(), Array.of(), copyWithin(), find()+findIndex(), fill(), entries()+keys()+values(), includes()

1.for of 直接遍历数组,for in 遍历数组的下标,遍历对象更简介

for(i in arr){
  console.log(arr[i])  //1,2,3,4,5
}

for(i of arr){
  console.log(i)  //1,2,3,4,5
}

2.forEach()循环

没有返回值,且对原数组没有影响,不支持return输出 只会跳出当前循环.

arr.forEach((val,index,arr)=>{
  console.log('val:',val, 'index:',index ,'arr:',arr)
  // val: 1 index: 0 arr:[1, 2, 3, 4, 5]
  // val: 2 index: 1 arr:[1, 2, 3, 4, 5]
  // val: 3 index: 2 arr:[1, 2, 3, 4, 5]
  // val: 4 index: 3 arr:[1, 2, 3, 4, 5]
  // val: 5 index: 4 arr:[1, 2, 3, 4, 5]
})
val arr数组内 每一项
index arr数组的下标
arr 代指数组所有内容

3.map循环

.有返回值,return什么就输出什么新数组,不改变原数组.

let mapArr = arr.map((item)=>{
  return item*2
})
console.log(mapArr)  //[2,4,6,8,10]
console.log(arr)  //[1,2,3,4,5]

4.filter()

有返回值,return 判断为true的元素组成的数组,若条件不满足返回空数组,不改变原数组.

 let filterArr = arr.filter(item=>{
  return item>3
})
console.log(filterArr)  //[4,5]
console.log(arr)  //[1,2,3,4,5]

5.find()

有返回值,return出的第一个判断为true的元素,则跳出循环,输出符合条件的元素.若条件不符合,输出undefined.不改变原数组.

let findArr = arr.find(item=>{
  return item>3
})
console.log(findArr)  //4

6.every()

数组中每一项符合条件返回true,否则返回false

let everyArr = arr.every(item=>{
return item>3
})
console.log(everyArr)  //false

7. some()

数组中的任一项符合条件,则返回true,否则返回false

let someArr = arr.some(item=>{
return item >3
})
console.log(someArr)  //true

8. reduce()

求和

let reduceArr = arr.reduce((sum,next,index)=>{
return sum += next
})
console.log(reduceArr)  //15

扁平化数组

var arr1 = [[1,2,3],[8,9,9],[4,5,6]]

let arr2 = arr1.reduce((sum,next,index)=>{
    return sum.concat(next)
})
console.log(arr2) //[1,2,3,8,9,9,4,5,6]

9.includes()

不用return,没有回调,输出true/false

console.log(arr.includes(3))  //true

10. keys() / values() / entries()

  • keys()是对键名的遍历
  • values()是对键值的遍历
  • entries()是对键值对的遍历

11. 解构赋值 (浅拷贝,因为它不能对多维数组或对象达到深拷贝的作用)

数组的解构赋值

let a = [0,1,2,3]
let b = [...a]
b.push(4)
console.log(a) // [0,1,2,3]
console.log(b) // [0,1,2,3,4]

对象的解构赋值

用法:
let {name="swr",age} = {age:28}
console.log(name) // 'swr'
console.log(age) // 28

应用:
function ajax({method,url,type='params'}){
    console.log(method) // 'get'
    console.log(url) // '/'
    console.log(type) // 'params'
}

ajax({method:"get",url:"/"})

12.扩展运算符

12.1数组

扩展运算符用三个点号表示,把数组或类数组对象展开成一系列用逗号隔开的值
剩余运算符也是三个点号,不过其功能与扩展运算符恰好相反,把逗号隔开的值序列组合成一个数组

let arr1 = [1,2,3]
let arr2 = [4,5,6]
let arr3 = [...arr1,...arr2]
console.log(arr3) // [ 1, 2, 3, 4, 5, 6 ]

// 但是扩展运算符不能把伪数组转为数组(除了有迭代器iterator的伪数组,如arguments)
let likeArr = { "0":1,"1":2,"length":2 }
let arr = [...likeArr] // 报错 TypeError: likeArr is not iterable

// 但是可以用Array.from把伪数组转为数组
let likeArr = { "0":1,"1":2,"length":2 }
let arr = Array.from(likeArr)
console.log(arr) // [1,2]

12.2对象

通过扩展运算符和Object.assign对对象进行合并的行为,是属于浅拷贝

// 以往我们这样合并对象
let name = { name:"zf" }
let age = { age:18 }
let person = {}
Object.assign(person,name,age)
console.log(person) // { name: 'zf', age: 18 }

// 使用扩展运算符
let name = { name:"zf" }
let age = { age:18 }
let person = {...name,...age}
console.log(person) // { name: 'zf', age: 18 }

13. 数组去重的几种方法

13.1双for循环

兼容性好

var arr = [1,2,3,1,2,3,5,6,7];
  
  function unique(arr){
    if(!Array.isArray(arr)){
      console.log('type error')
      return
    }
    let res = [arr[0]];
    for(let i = 0;i<arr.length;i++){
      let flag = true;
      for(let j = 0;j<res.length;j++){
        if(arr[i] === arr[j]){
          flag = false;
          break;
        }
      }
      if(flag){
        res.push(arr[i])
      }
    }
    return res
  }
  console.log(unique(arr)) // [1, 2, 3, 5, 6, 7]

13.2 indexOf()简化内层循环

  • NAN不能去重,因为indexOf()底层是‘===’,而NAN===NAN是不相等的
var arr = [1,2,3,1,2,3,5,6,7];
  
  function unique(arr){
    if(!Array.isArray(arr)){
      console.log('type error');
      return;
    }
    let res = [arr[0]];
    for(let i = 0;i<arr.length;i++){
      var current = arr[i];
      if(res.indexOf(current) === -1){
         # res中不存在则push
        res.push(current)
      }
    }
    return res;
  }

  console.log(unique(arr)) // [1, 2, 3, 5, 6, 7]

13.3排序后去重

sort方法排序后,相同的元素就排在一起,只需比较当前元素和上一个元素是否相等

var arr = [1,2,3,1,2,3,5,6,7];
  function unique(arr){
    if(!Array.isArray(arr)){
      console.log('type error')
      return
    }

    let res = []
    let sortArr = arr.sort()
    for(let i = 0;i<sortArr.length;i++){
      if(sortArr[i] !== sortArr[i+1] ){
        res.push(sortArr[i])
      }
    }
    return res
  }
  console.log(unique(arr)) // [1, 2, 3, 5, 6, 7]

13.4 es6新增filter()方法

可以简化外层循环

var arr = [1,2,3,1,2,3,5,'1',6,7];
  function unique(arr){
    if(!Array.isArray(arr)){
      console.log('type error')
      return
    }

    let res = arr.filter((item,index,arr)=>{
      return arr.indexOf(item) === index
    })
    return res
  }
  console.log(unique(arr)) // [1, 2, 3, 5, 6, 7]

13.5 ES6中的set()+扩展运算符/Array.from()

var arr = [1,2,3,1,2,3,5,6,7];
  function unique(arr){
    if(!Array.isArray(arr)){
      console.log('type error');
      return
    }
    return Array.from(new Set(arr))
    // 或者
    return [...new Set(arr)]
  }
  console.log(unique(arr))

把数组转换为字符串

toString()

var fruits = ["Banana", "Orange", "Apple", "Mango"];
document.getElementById("demo").innerHTML = fruits.toString(); 

Banana,Orange,Apple,Mango

join()

var fruits = ["Banana", "Orange","Apple", "Mango"];
document.getElementById("demo").innerHTML = fruits.join(" * "); 

Banana * Orange * Apple * Mango

Popping 和 Pushing

在处理数组时,删除元素和添加新元素是很简单的。

Popping 和 Pushing 指的是:

从数组弹出项目,或向数组推入项目。

Popping

pop() 方法从数组中删除最后一个元素:

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.pop();              // 从 fruits 删除最后一个元素("Mango")

pop() 方法返回“被弹出”的值:

var fruits = ["Banana", "Orange", "Apple", "Mango"];
var x = fruits.pop();      // x 的值是 "Mango"

Pushing

push() 方法(在数组结尾处)向数组添加一个新的元素:

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.push("Kiwi");       //  向 fruits 添加一个新元素

push() 方法返回新数组的长度:

var fruits = ["Banana", "Orange", "Apple", "Mango"];
var x =  fruits.push("Kiwi");   //  x 的值是 5

位移元素

位移与弹出等同,但处理首个元素而不是最后一个。

shift() 方法会删除首个数组元素,并把所有其他元素“位移”到更低的索引。

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.shift();            // 从 fruits 删除第一个元素 "Banana"

shift() 方法返回被“位移出”的字符串:

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.shift();             // 返回 "Banana"

记得点赞哦~jio咪   !!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值