Array
分为 不影响原数组 和 影响原数组 两大类!!!
const arr = [
{ name: 'zs', age: 19 },
{ name: 'ls', age: 9 },
{ name: 'ww', age: 29 },
]
// 1.都不影响原来的数组, 都是得到一个新的数组
// 过滤出满足条件的项
const res = arr.filter((item) => item.age > 10)
// 一比一映射出一个相同长度的数组
const res2 = arr.map((item) => item.name)
// 找不到返回undefined, 找到第一个满足条件的就结束
const res3 = arr.find(item => item.name === 'zs')
// 找不到返回-1, 找到第一个满足条件的就结束
const res4 = arr.findIndex(item => item.name === 'ls')
// 找到第一个满足条件的就结束, 返回true; 都不满足返回false
const res5 = arr.some(item => {
// console.log(item)
return item.age > 10
})
// 找到第一个不满足条件的就结束, 返回false; 都满足返回true
const res6 = arr.every(item => {
// console.log(item)
return item.age > 10
})
// acc第一次是给定的初始值0, 回调函数的返回值作为下一次acc的值
const res7 = arr.reduce((acc, cur) => {
return acc + cur.age
}, 0)
// 从右到左遍历reduce
const res8 = arr.reduceRight((acc, cur) => {
return acc + cur.age
}, 0)
// 单纯遍历
arr.forEach((item, index) => {
console.log(item, index)
})
const arr2 = [1, 2, 3]
const arr3 = [4, 5, 6]
// 不影响原数组, 返回截取的新数组
console.log(arr2.slice(0, 1))
// 不影响原数组, 返回一个合并好的新数组
console.log(arr2.concat(arr3))
const arr4 = [1, [2, 3, [4, 5, 6]]]
// 不影响原数组, 返回一个扁平化好的数组
console.log(arr4.flat(Infinity))
// 是否包含某项
const arr5 = [1, 2, 3, 2, 3]
console.log(arr5.includes(4)) // false
console.log(arr5.indexOf(3)) // 2
console.log(arr5.lastIndexOf(3)) // 4
// 不影响原数组, 将数组每一项用分隔符拼接成字符串 然后返回
console.log(arr5.join('-'))
--------------------------------------------------------------
// 2.影响原数组
const arr2 = [1, 2, 3]
// 直接将原数组翻转
arr2.reverse()
// 数组最后添加, 返回数组长度
console.log(arr2.push(4, 5))
// 删除数组最后一个, 返回被删除的项
console.log(arr2.pop())
// 数组最前添加, 返回数组长度
console.log(arr2.unshift(4, 7))
// 删除数组最前一个, 返回被删除的项
console.log(arr2.shift())
// 对原数组排序
arr2.sort((a, b) => {
// a后面那个数, b前面那个数
// 返回值>0, 不交换位置; 反之 换位置
console.log(a, b)
return b - a
})
// 删除数组中指定位置的项(也可以新增), 返回被删除项组成的数组
console.log(arr2.splice(1, 1))