关于javascript:数组的常用方法总结

45次阅读

共计 4707 个字符,预计需要花费 12 分钟才能阅读完成。

一、根本应用
1、数组的创立
(1) 通过[]

let arr1 = [1, 2, 3, 4, 5]

(2) 通过创立构造函数 Array 的实例

let arr2 = new Array(1, 2, 3, 4, 5)
console.log(arr2) // [1, 2, 3, 4, 5]

须要留神的是,如果构造函数中传入的参数只有一个数字,此时会被认为这个数字为数组的长度,如下所示

let arr3 = new Array(6) // 并不是代表创立 [6], 而是创立长度为 6 的空数组
console.log('arr3--',arr3)

想要解决这个问题能够通过上面这种形式创立数组
(3) 应用 Array 构造函数上的静态方法 Array.of

let arr4 = Array.of(6)
console.log(arr4) // [6]

也能够传入多个数字,此时和 new Array() 用法统一

let arr5 = Array.of(1, 2, 3, 4, 5)
console.log(arr5) // [1, 2, 3, 4, 5]

2、数组转字符串
以下有三种办法都能够使数组变成字符串,toString()和 String()会给每个字符以逗号(,)分隔,join 以传入的指定分隔符分隔,不传的时候就不会有分隔符

let list1 = ['a', 'b', 'c']

let arr1 = list1.toString()
let arr2 = String(list1)
let arr3 = list1.join('')

console.log('arr1--',arr1) // a,b,c
console.log('arr2--',arr2) // a,b,c
console.log('arr3--',arr3) // abc

3、字符串转数组
应用 split 对数组进行宰割,能够看作是 join 的反向操作,Array 的静态方法 from,只有该数据类型有 length 属性,就能够应用 Array.from 将它转成数组

let message = 'hello'
let list1 = message.split('')
let list2 = Array.from(message)

console.log('list1--', list1) // ["h", "e", "l", "l", "o"]
console.log('list2--', list2) // ["h", "e", "l", "l", "o"]

4、循环
数组的循环形式十分多,能够依据不同的场景须要抉择不同的循环形式

let list = ['a', 'b', 'c', 'd']
for(let i = 0; i < list.length; i ++)
for(let i in list)
for(let item of list)
list.map()
list.forEach()

5、开展语法
咱们晓得,当一个数组赋值给一个变量的时候,赋值的是内存地址,当原数组产生了扭转的时候,被赋值的变量也会产生扭转。
有时候咱们并不心愿两个数组指向同一片内存地址,这时候应用开展语法就能很好的解决问题。
开展语法相当于把数组里的每一个元素都拿进去,放到一个新的数组里,这个新数组指向的新的内存空间。

let list1 = ['kiki', 'alice']
let list2 = list1
let list3 = [...list1]

list1.push('windy')
console.log('list1--', list1) // ["kiki", "alice", "windy"]
console.log('list2--', list2) // ["kiki", "alice", "windy"]
console.log('list3--', list3) // ["kiki", "alice"]

6、解构赋值
解构赋值在对象里更罕用一些,不过数组中也是能够应用解构赋值的,解构定义的变量与数组的索引值一一对应

let user = ['kiki', 15]
let [name, age] = user

console.log(name, age) // kiki 15

二、增删改查
1、减少
push 从尾部减少, 返回值为数组的长度
unshift 从头部减少, 返回值为数组的长度

let list = ['a', 'b', 'c', 'd']
    
console.log(list.push('x')) // 5
console.log(list.unshift('y')) // 6
console.log(list) // ["y", "a", "b", "c", "d", "x"]

2、删除
pop 从尾部删除元素, 返回值为删除的元素
shift 从头部删除元素, 返回值为删除的元素

let list = ['a', 'b', 'c', 'd']
    
console.log(list.pop()) // d
console.log(list.shift()) // a
console.log(list) // ["b", "c"]

3、批改
splice 这个办法很好用,能够删除、减少、批改原数组,第一个参数传递的是须要定位到的索引值,第二个参数传递从以后索引值开始往后数几位数须要被删除,第三个参数开始传递的是须要减少的参数。
当不传第三个参数时,示意删除元素,当传递的第二个参数为 0 时,示意数组里一个元素都不删除,第三个往后的参数都能够增加到以后数组中

let list = ['a', 'b', 'c', 'd']
list.splice(2, 1, 'kiki')
console.log(list) // ["a", "b", "kiki", "d"]

4、查找
(1) 查找该元素第一次呈现的索引值地位 indexOf 从头部开始计算、lastIndexOf 从尾部开始计算

let list = ['a', 'b', 'c', 'd', 'a', 'b', 'c']

console.log(list.indexOf('a')) // 0
console.log(list.lastIndexOf('a')) // 4

(2) 查找元素,传递一个查找规定的函数
find 查找数组中是否有存在符合条件的元素,存在即返回第一个符合条件的元素
findIndex 查找数组中是否有存在符合条件的元素,存在即返回第一个符合条件的元素索引值

let users = [{ name: 'kiki', age: 16},
   {name: 'alice', age: 17},
   {name: 'macus', age: 18}
]
let item = users.find(item=>{return item.age > 16})
let index = users.findIndex(item=>{return item.age > 16})
console.log(item) // {name: 'alice', age: 17}
console.log(index) // 1

(3) 判断元素是否存在于该数组中 includes

let list = ['a', 'b', 'c', 'd']
 
console.log(list.includes('c')) // true
console.log(list.includes('f')) // false

(4) 判断元素是否符合条件
every 用来判断是否所有元素符合条件
some 用来判断是否有一个元素符合条件

let users = [{ name: 'kiki', age: 16},
   {name: 'alice', age: 17},
   {name: 'macus', age: 18}
]
let someFlag = users.some(item=>{return item.age > 16})
let everyFlag = users.every(item=>{return item.age > 16})
console.log(someFlag) // true
console.log(everyFlag) //false

三、简单操作
1、合并元素,能够通过 concat 或者开展语法,两种形式都不会扭转原数组

let list1 = ['a', 'b', 'c']
let list2 = [2, 4, 6]
let newList = list1.concat(list2)
let newArr = [...list1, ...list2]

console.log(list1) // ["a", "b", "c"]
console.log(list2) // [2, 4, 6]
console.log(newList) // ["a", "b", "c", 2, 4, 6]
console.log(newArr) // ["a", "b", "c", 2, 4, 6]

2、清空数组
(1) 将数组赋值为空数组 []

let list = ['a', 'b', 'c', 'd']
list = []

这样的形式可能存在一个问题,如果将 list 赋值给另外的数组,间接将 list 赋值为空时,arr 的值并不会产生扭转,因为最后的时候,arr 和 list 都指向同一个内存地址,当 list 从新赋值后,则指向新的内存地址,此时 arr 依然指向原来的内存地址

let list = ['a', 'b', 'c', 'd']
let arr = list
list = []
console.log(arr) // ['a', 'b', 'c', 'd']
console.log(list) // []

(2) 将元素的长度设置为 0

let list = ['a', 'b', 'c', 'd']
let arr = list
list.length = 0
console.log(list) // []
console.log(arr) // []

(3) 通过 splice 截取数组

let list = ['a', 'b', 'c', 'd']
let arr = list
list.splice(0, list.length)
console.log(list) // []
console.log(arr) // []

(4) 一直的从头部 / 尾部删除元素

let list = ['a', 'b', 'c', 'd']
let arr = list
while(list.pop()){}
console.log(list) // []
console.log(arr) // []

3、过滤
filter 与 find 不同,find 只找出第一个符合条件的元素,然而 filter 会筛选中符合条件的所有元素

let users = [{ name: 'kiki', age: 16},
   {name: 'alice', age: 17},
   {name: 'macus', age: 18}
]
let items = users.filter(item=>{return item.age > 16})
console.log(items)
// [{name: 'alice', age: 17}, {name: 'macus', age: 18}]

4、排序
sort 也须要传入一个函数,当传入的参数为 a – b,排序为正序

let list = [8, 5, 6, 7, 9, 12, 3]

list.sort((a, b)=>{return a - b})
console.log(list) // [3, 5, 7, 8, 9, 12]

5、累加 reduce
reduce 传入回调函数的参数会略微多一点,比其余的函数要难了解一些。
第一个参数 pre 代表前一次执行 reduce 的后果,这里的操作是累加,reduce 函数还能够传入第二个参数,代表初始化的值,如果没有传,pre 就会取数组的第一个值。
回调函数里第二个参数 current 代表以后元素的值,第三个参数 index 代表以后元素的索引值,第四个参数代表执行 reduce 函数的数组

let list = [8, 5, 6, 7, 9, 12, 3]
let total = list.reduce(function(pre, current, index, arr){console.log(pre, current, index, arr)
    return pre + current
})
console.log(total)

以上就是数组罕用的办法,可能还有一些办法没有演绎进来,欢送大家进行补充~

正文完
 0