js课程复习实践3: 数组的其他用法

排序等

逆序方法.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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值