排序等
逆序方法.reverse()
var arr = [1, 2, 3, 4]
arr.reverse()
document.write(arr) // 4,3,2,1
document.write("<hr>")
排序.sort()
默认使用字典序排列
var arr2 = [9, 5, 8, 3, 6, 7]
arr2.sort()
document.write(arr2) // 3,5,6,7,8,9
document.write("<hr>")
设置反字典序排列:
var arr3 = [9, 5, 8, 3, 6, 7]
arr3.sort(function (a, b) { return b - a })
document.write(arr3) // 9,8,7,6,5,3
document.write("<hr>")
进行判断的函数对象,若返回正数,则交换
编写一个奇偶排序,偶数在右,奇数在左
// 编写一个奇偶排序,偶数在右,奇数在左
var arr4 = [9, 5, 8, 3, 6, 7]
arr4.sort(function (a, b) {
if (a % 2 == 1) { // 如果a是奇数,则不换位置
return - 1;
} else {
// return (b % 2)
/* 为1,说明b是奇数,结果为正,则换位置;
如果为0,则不换位置
下面改进一下: 如果是负数,则不换位置
*/
return parseInt(Math.pow(4, (b % 2))) - 2
}
})
document.write(arr4) // 7,3,5,9,8,6
document.write("<hr>")
// 简单是最好的: 只有一种情况需要交换
var arr5 = [9, 5, 8, 3, 6, 7]
arr5.sort(function (a, b) {
if (!(a % 2) && (b % 2)) { // 如果a是奇数,则不换位置
return 1;
}
return -1;
})
document.write(arr5) // 7,3,5,9,8,6
document.write("<hr>")
// 编写一个奇偶排序,偶数在右,奇数在左,奇偶内部排序
// 只有两种情况需要交换
arr5 = [9, 5, 8, 3, 6, 7]
arr5.sort(function (a, b) {
if (!(a % 2) && (b % 2)) { // 如果a是奇数,则不换位置
return 1;
} else if ((a % 2) == (b % 2)) {
return a - b;
}
return -1;
})
document.write(arr5) // 3,5,7,9,6,8
document.write("<hr>")
连接与分割
连接: join
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
var s = arr.join()
document.write(s, "<br>")
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
var s = arr.join('-')
document.write(s, "<br>")
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
var s = arr.join('')
document.write(s, "<br>")
console.log("s是:", s, ",类型是:", typeof (s))
分割: split
var arr2 = s.split("")
document.write(arr2, "<br>")
console.log("arr2是:", arr2, ",类型是:", typeof (arr2))
var s2 = "1a2b3c"
var arr3 = s2.split(/[1-3]/) // 这里使用了正则表达式
document.write(arr3, "<br>")
console.log("arr3是:", arr3, ",类型是:", typeof (arr3))
document.write("<hr>")
正则表达式参考:js正则表达式基本语法(精粹)
检索: indexOf
,lastIndexOf
// 数组检索
var a = [9, 5, 8, 5, 3, 6, 7]
var index = a.indexOf(5)
console.log(index) // 1 ,只找一个
index = a.indexOf(5, 2)
console.log(index) // 3 , 从位置2开始往后找
var index2 = a.lastIndexOf(5)
console.log(index2) // 3 ,只找一个
var index2 = a.lastIndexOf(5, 2)
console.log(index2) // 1, 从位置2开始往前找
检测:是否满足某条件
全部元素满足: every
数组检测: 所有元素是否都满足某条件
var a = [2, 4, 6, 8, 10]
function is_even(value) {
console.log(value)
return (value % 2 == 0)
} // 这里,遇到不合法的元素,后面就会被停止
var result = a.every(is_even) // true
console.log("result:", result)
// result && document.write("a中全都是偶数")
if (result) {
document.write("a中全都是偶数") // √ 输出这个
} else {
document.write("a中不全是偶数")
}
document.write("<hr>")
考虑到函数原型 arr.every(f[,obj])
,可以再输入一个obj
第二种用法:是再传入一个对象,代替this
(本来的默认应该是window)
var b = [
{ name: "张", age: 20 },
{ name: "李", age: 30 },
{ name: "王", age: 40 },
]
var obj = {
min_age: 18,
max_age: 80
}
function f2(value) {
if (value.age < this.min_age || value.age > this.max_age) {
return false
}
return true
}
result = b.every(f2, obj) // true
if (result) {
document.write("合法的") // √ 输出这个
} else {
document.write("年龄中有不合法的")
}
document.write("<hr>")
存在元素满足: some
arr.some(f,[obj])
,监测是否有满足某条件的元素
映射,过滤
映射:.map(f)
返回一个数组,新数组的元素,是原数组对应位置的元素传入f得到的结果
var arr = [1, 2, 3, 4, 5, 6]
document.write("原数组为:", arr, '<hr>')
function f(value) {
return value * value
}
var a = arr.map(f)
// 对arr中元素求平方
document.write(a, '<hr>') // 1,4,9,16,25,36
var b = arr.map(Math.sqrt)
// 对arr中元素求开方
document.write(b, '<hr>') // 1,1.4142135623730951,1.7320508075688772,2,2.23606797749979,2.449489742783178
过滤:filter(f[,obj])
f返回boolean值,若原数组元素,进入f返回true,则会出现新数组中
var arr2 = [1, 2, 3, 4, 5, 6, 7, 8]
function is_odd(value) {
return value % 2 == 1
}
var a_odd = arr2.filter(is_odd) // 只显示奇数
document.write(a_odd, '<hr>') // 1,3,5,7