// 数组
// 确定基本类型用typeOf,确定是哪种引用类型用instanceof
let arr = [1, 2]
console.log(typeof arr) // object
console.log(arr instanceof Array) // true
Array.isArray(arr) // true 判断数组用这个
// sort,reverse
let as = [0, 1, 5, 10, 15, 45, 55]
console.log(as.sort()) // [ 0, 1, 10, 15, 45, 5, 55 ] sort会将数组的值转换为字符串进行比较
function compare(value1, value2) {
if (value1 > value2) {
return 1
} else if (value1 < value2) {
return -1
} else {
return 0
}
}
console.log(as.sort(compare)) // [ 0, 1, 5, 10, 15, 45, 55 ] 顺序
console.log(as.sort(compare).reverse()) // [ 55, 45, 15, 10, 5, 1, 0 ] 逆序
// push 尾部推入
let arry_2 = [0, 1, 5, 10, 15, 45, 55]
arry_2.push(66)
console.log(arry_2) // [ 0, 1, 5, 10, 15, 45, 55,66 ]
// pop 尾部删除
let arry_3 = [0, 1, 5, 10, 15, 45, 55]
arry_3.pop()
console.log(arry_3) // [ 0, 1, 5, 10, 15, 45] 尾部删除
// unshift 头部推入
let arry_4 = [0, 1, 5, 10, 15, 45, 55]
arry_4.unshift(-1)
console.log(arry_4) // [ -1,0, 1, 5, 10, 15, 45, 55 ]
// shift 头部删除
let arry_5 = [0, 1, 5, 10, 15, 45, 55]
arry_5.shift()
console.log(arry_5) // [ 1, 5, 10, 15, 45, 55]
// slice
// 切开数组,第一参数是起始位置,第二参数是结束位置(但是不包括结束的这个位置),如果第二个参数没写,则默认是到数组结束为止
let arry_6 = [0, 1, 5, 10, 15, 45, 55]
console.log(arry_6.slice(1, 3))// [ 1, 5 ]
// splice 拼接
let arry_7 = [0, 1, 5, 10, 15, 45, 55]
arry_7.splice(1, 2) // 删除数组,第一个参数是起始位置,第二参数是起始位置后要删除的项数,如果不填第二个参数则默认到数组结束为止,当第二个参数设置为1时可以用来定点删除数组
console.log(arry_7) //[ 0, 10, 15, 45, 55 ]
arry_7.splice(1, 0, 66, 77) // 第二个参数为0时,为增加数组,后面的参数为添加内容
console.log(arry_7) //[ 0, 66, 77, 10, 15, 45, 55 ]
arry_7.splice(1, 2, 11, 22) // 替换数组内容
console.log(arry_7) //[ 0, 11, 22, 10, 15, 45, 55 ]
// indexOf lastIndexOf 数组查找
let arry_8 = [0, 1, 5, 10, 15, 1, 55]
console.log(arry_8.indexOf(1)) // 1 从头部开始找,返回第一个符合的值,判断相等默认用'===',没有则返回-1
console.log(arry_8.lastIndexOf(1)) //5 从尾部开始找,返回第一个符合的值,判断相等默认用'===',没有则返回-1
// 迭代方法
let arry_9 = [1, 2, 3, 4, 5]
// every():对数组每一项运行给定函数,每一项都返回true,则返回true
console.log(arry_9.every((item) => {
return (item > 3)
})) // false
// some():对数组每一项运行给定函数,有一项都返回true,则返回true
console.log(arry_9.some((item) => {
return (item > 3)
})) // true
// filter()对数组每一项运行给定函数,返回该函数会返回true的项组成的数组 (新的数组) 如果数组里有引用,则只是拷贝指针
console.log(arry_9.filter((item) => {
return (item > 3)
})) // [ 4, 5 ]
let ao = {a: 1, b: 2}
let bo = {a: 1, b: 2}
console.log(ao == bo) // false
console.log(ao === bo) // false
let arry_10 = [ao, 2]
console.log(arry_10.filter((item) => {
return (typeof item === 'object')
})) //[ { a: 1, b: 2 } ]
console.log(arry_10.filter((item) => {
return (typeof item === 'object')
})[0] === ao) //true
// forEach 对数组每一项执行函数,没有返回值
let arry_11 = [1, 2, 3, 4]
arry_11.forEach(item => {
item = item + 2
})
console.log(arry_11) // [ 1, 2, 3, 4 ] 因为 item 是数组的一个值,直接改变这个值是没有意义的,如果item是一个引用类型就可以改变这项数据的值
arry_11.forEach((item, index, array) => {
array[index] = item + 2
})
console.log(arry_11) // [ 3, 4, 5, 6 ]
let arry_12 = [1, 2, 3, 4]
console.log(arry_12.map((item) => {
return (item * 2)
})) // [ 2, 4, 6, 8 ]
// reduce 遍历所有项,最终返回一个值 这个函数返回的每一个值会作为下次迭代的第一个参数, 可用于数组求和等
let arry_13 = [1, 2, 3, 4, 5]
console.log(arry_13.reduce((pre, next, index, array) => {
return (pre + next)
})) // 15
// reduceRight 和 reduce 一样,只是执行顺序相反
let arry_14 = [1, 2, 3, 4, 5]
console.log(arry_14.reduceRight((pre, next, index, array) => {
return (pre + next)
})) // 15