定场诗
守法朝朝忧闷,强梁夜夜欢歌;
损人利己骑马骡,正值公平挨饿;
修桥补路瞎眼,杀人放火儿多;
我到西天问我佛,佛说:我也没辙!
前言
读《学习JavaScript数据结构与算法》- 第3章 数组,本小节将继续为各位小伙伴分享数组的相关知识:ES6数组的新功能。
一、ES6数组新功能
ES5和ES6数组新方法
for...of
let roles = ['宋江', '吴用', '卢俊义']
for (let v of roles) {
console.log(v)
}
@@iterator
let iterator = roles[Symbol.iterator]()
// .next()读取一次,依次迭代即可; 当迭代结束时,iterator.next().value返回undefined
console.log(iterator.next().value)
// 迭代
for (let v of iterator) {
console.log(v)
}
entries
let rolesEntries = roles.entries()
console.log(rolesEntries.next().value) // [ 0, '宋江' ]
for (v of rolesEntries) {
console.log(v)
}
keys
let rolesKeys = roles.keys()
console.log(rolesKeys)
for (v of rolesKeys) {
console.log(v)
}
values
let rolesValues = roles.values()
console.log(rolesValues)
for (v of rolesValues) {
console.log(v)
}
Array.from
let newRoles = Array.from(roles)
console.log(newRoles) // ['宋江', '吴用', '卢俊义']
Array.of
let roles = Array.of('宋江', '李顺', '阮小七')
console.log(roles) // [ '宋江', '李顺', '阮小七' ]
Array.fill
let numbers = new Array(6)
numbers = Array.fill(1)
console.log(numbers) // [ 1, 1, 1, 1, 1, 1 ]
copyWithin
let numbers = [1, 2, 3, 4, 5, 6]
// 将索引3到索引5位置之间的数据,复制到索引1位置
numbers.copyWithin(1, 3, 5)
console.log(numbers) // [ 1, 4, 5, 4, 5, 6 ]
数组排序
rerverse
let numbers = [1, 2, 3]
numbers.reverse()
console.log(numbers) // [ 3, 2, 1 ]
sort
let arr = ['a', 'b', 'd', 'c', 'f', 'e']
arr.sort()
console.log(arr) // [ 'a', 'b', 'c', 'd', 'e', 'f' ]
那么问题来了!下面的代码console.log()输出什么?
let numbers = [1, 2, 3, 10, 11, 12, 13]
numbers.sort()
console.log(numbers) // ??? 思考10秒钟.....
那如何解决实际问题,得到我们想要的结果呢?
let numbers = [1, 2, 3, 10, 11, 12, 13]
numbers.sort((a, b) => a - b)
console.log(numbers) // [ 1, 2, 3, 10, 11, 12, 13 ]
**思考升级:**字符串比较-大小写比较
let users = ['Ana', 'ana', 'John', 'john']
users.sort()
console.log(users) // ???
解决问题
let users = ['Ana', 'ana', 'John', 'john']
users.sort((a, b) => {
if (a.toLocaleLowerCase() > b.toLocaleLowerCase()) {
return 1
}
if (a.toLocaleLowerCase() < b.toLocaleLowerCase()) {
return -1
}
return 0
})
console.log(users) // [ 'Ana', 'ana', 'John', 'john' ]
**实际业务场景:**一系列数据排序:如按年龄、级别等
let users = [
{
name: '王二狗',
age: 20
},
{
name: '张三炮',
age: 30
},
{
name: '李四',
age: 15
}
]
users.sort((a, b) => a.age > b.age)
console.log(users) // [ { name: '李四', age: 15 }, { name: '王二狗', age: 20 }, { name: '张三炮', age: 30 } ]
数组搜索
ES5中为我们提供了indexOf()和lastIndexOf()方法查找元素,但是该二者方法只能查询字符串数据,如查询对象数组中的某个元素就力有不逮了。
业务场景: 购物车添加商品操作
原先处理方式:遍历购物车数组myCart,判断待添加购物车商品tmpGoods的id和已有商品的id进行比对,若相同,则获取当前元素索引,执行操作
拥抱ES6的新变化吧!- findIndex
// 已有购物车商品信息
let myCart = [
{
id: 1001,
name: 'xxx-范冰冰版',
num: 1
},
{
id: 1002,
name: 'xxx-志玲姐姐版',
num: 2
},
{
id: 1003,
name: 'xxx-小岳岳版',
num: 1
}
]
// 待加入购物车的商品
let tmpGoods = {
id: 1003,
name: 'xxx-小岳岳版',
num: 1
}
// 检测该商品是否已经存在于购物车
let index = myCart.findIndex(item => item.id === tmpGoods.id)
console.log(index)
if (index !== -1) {
myCart[index].num += tmpGoods.num
} else {
myCart.push(tmpGoods)
}
console.log(myCart)
ES7 - includes
let roles = ['诸葛亮', '荆轲', '虞姬', '亚瑟']
console.log(roles.includes('荆轲')) // true
console.log(roles.includes('哪吒')) // false
输出数组为字符串
toString
let numbers = [1, 2, 3, 4]
console.log(numbers.toString()) // 1,2,3,4
join
let numbers = [1, 2, 3, 4]
console.log(numbers.join('-')) // 1-2-3-4
后记
以上就是胡哥今天给大家分享的内容,喜欢的小伙伴记得**收藏
、转发
、点击右下角按钮在看
**,推荐给更多小伙伴呦,欢迎多多留言交流...
长按扫码关注,更帅更漂亮呦!关注胡哥有话说公众号,可与胡哥继续深入交流呦!