JS数组基础(二)

140 阅读3分钟

数组的增,删,改,查

一: 增

  1. 在尾部添加元素
* arr.push(newItem)//修改arr,返回新长度
arr.push(item1,item2)//修改arr,返回新长度

例子:

let arr = [1,2,3,4,5,6,7]
arr.push(9)
arr

得到数组为 [1,2,3,4,5,6,7,9]

let arr = [1,2,3,4,5,6]
arr.push('a','b')
arr

得到数组为 [1,2,3,4,5,6,"a","b"]

  1. 头部添加元素
arr.unshift(newItem)//修改arr,返回新长度
arr.unshift(item1,item2)//修改arr,返回新长度

例子:

let arr = [1,2,3,4,5,6]
arr.unshift('a','b','c')
arr

得到数组["a","b","c",1,2,3,4,5,6]

  1. 在中间添加元素
arr.splice(index,0,'x')//在index处插入'x'
arr.splice(index,0,'x','y')

例子:

let arr = [1,2,3,4,5,6]
arr.splice(2,0,2.5)//在2这个位置,不删除元素,插入2.5

得到数组[1,2,2.5,3,4,5,6]

splice还可以修改元素

let arr = [1,2,3,4,5,6]
arr.splice(2,1,2.5)//在2这个位置,删除一个元素,插入2.5

得到数组[1,2,2.5,4,5]

二: 删

  1. 删除头部
arr.shift()

例子:

let arr = [1,2,3]
arr.shift()
arr

得到数组 [2,3]

  1. 删除尾部元素
arr.pop()

例子:

let arr = [1,2,3]
arr.pop()
arr

得到数组[1.2]

  1. 删除中间元素
arr.splice(index,1)//删除index的一个元素
arr.splice(index,1,'x')//并在删除的位置添加'x'
arr.splice(index,1,'x','y')//并在删除的位置添加'x','y'

例子:

let arr = [1,2,3,4,5,6,7,8]
arr.splice(5,1,6666)
arr

得到数组 [1,2,3,4,5,6666,7,8]

三: 查

  1. 查看单个对象
  • 查找某个元素是否在数组里
 arr.indexOf(item)//存在返回索引,否则返回-1

例子:

let arr = [12,23,12,333,45,16]
arr.indexOf(13)//返回-1,表示没有
arr.indexOf(12)//返回0,表示存在
  • 使用条件查找元素
arr.find(item=>item%2===0)//找到第一个偶数

例子:

let arr = [12,23,12,222,45,16]
arr.find(function(x){
return x%5===0})//返回45
 
arr.find(function(x){
return x%111===0})//返回222

arr.find(function(x){
return x%2===0})//返回12

缺点:find方法会返回第一个符合条件的元素,但是无法返回元素下标,所以并不知道具体是第几个数字

  • 使用条件查找元素的索引
arr.findIndex(item=>item%2===0)//找到第一个偶数的索引

例子:

let arr = [12,23,12,222,45,16]
arr.findIndex(function(x){
return x%2===0})//返回0
  • 跟对象一样
let arr = [111,222,333]
arr[0]
  • 注意一种情况就是索引越界
arr[arr.lenght]===undefined
arr[-1]===undefined

举个例子:

let arr = [1,2,3,4,5,6,7,8]
for(let i =  0;i<= arr.length; i++){
console.log(arr[i].toString())
}

惊喜出现:

为啥会这样???这是因为你读取了undefined的toString属性,不是toString是undefined,x.toString()其中x如果是undefined就会报错

解决方法: 再加一个

console.log(arr[i])

三: 改

  1. 反转顺序
arr.reverse()//修改原数组

例子:

let arr = [1,3,4,5,6,7,8,9]
arr.reverse()//就会得到[9,8,7,6,5,4,3,2,1]
var s = 'abcd'
s.split('')
s.split('').reverse()//得到["e","d","c","b","a"]
s.split('').reverse().join('')//得到"edcba"

这类数组,先分开,再反转,再合并

  1. 自定义顺序
arr.sort((a,b)=>a-b)

例子:

let arr = [5,4,3,2,1]
arr.sort(function(a,b){
if(a>b){
return 1
}else if(a===b){
return 0
}else{
return -1
}
})//得到1,2,3,4,5

let arr = [5,4,3,2,1]
arr.sort(function(a,b){
if(a>b){
return -1
}else if(a===b){
return 0
}else{
return 1
}
})//得到5,4,3,2,1
let arr = [
{name:'小明',score:99},{name:'小红',score:95},{name:'大黄',score:100}
]
arr.sort(function(a,b){
if(a.score > b.score){return 1}
else if(a.score === b.score){return 0}else{return -1}
})

得到:

let arr = [{name:'小明',score:99},{name:'小红',score:95},{name:'大黄',score:100}]
arr.sort((a,b)=> a.score - b.score)

得到相同结果