<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>排序</title>
</head>
<body>
<script type="text/javascript">
//reverse()逆序、 sort()默认升序: 返回的是经过排序后的 数组
var values = [1,2,3,4,5,6];
var result = values.reverse(); // [6,5,4,3,2,1]
console.log(typeof result); 'object'
console.log(Array.isArray(result)); true
var values2 = [1,2,3,10,5,6];
values2.sort();// 1,10,2,3,5,6
//sort默认是升序 且是对 字符串的升序,每个数组项都调用了toString()
sort(function),接收比较函数 处理 数值比较大小
// 1、处理一般的数值排序
function compare(val1,val2){//升序
if(val1<val2){
return -1
}else if(val1>val2){
return 1
}else{
return 0
}
}
function compare(val1,val2){//降序
if(val1<val2){
return 1
}else if(val1>val2){
return -1
}else{
return 0
}
}
function compare(val1,val2){// 简化的 升序
return val2-val1
}arrData.sort(compare)
2、处理对象数组排序,根据 数组项 对象中的字段来排序
var data = [{name:'Aen',age:20},{name:'Jack',age:18}]
//2.1自定义直接比较
function compare(a,b){
if(a.name<b.name){
return -1
}else if(a.name>b.name){
return 1
}else{
return 0
}
}
data.sort(compare)
//2.2 通过传参比较,可根据需要传入比较的字段
function createCompareFunction(propertyName){
return function(obj1,obj2){
var val1 = obj1[propertyName];
var val2 = obj2[propertyName];
if(val1<val2){
return -1
}else if(val1>val2){
return 1
}else{
return 0;
}
}
}
data.sort(createCompareFunction('name'));//[{name:'Aen',age:20},{name:'Jack',age:18}]
data.sort(createCompareFunction('age'))//[{name:'Jack',age:18},{name:'Aen',age:20}]
二、搜索 indexOf(element) 、 lastIndexOf(element) / ecmascript2015---- find(callback) findIndex(callback) /ecmascript 7--- includes()
numbers = [1,2,3,4,5,6,7,8,10,15,12,5,8]
numbers.indexOf(5) // 4
numbers.lastIndexOf(5) //11
numbers.find((element,index,array)=>{
return element%15===0
}) // 15
numbers.findIndex((element,index,array)=>{
return element%15===0
}) // 9
numbers.includes(15) //true
</script>
</body>
</html>