javascript sort问题。该函数能实现按照对象的某个属性为标准进行排序

JavaScript017

javascript sort问题。该函数能实现按照对象的某个属性为标准进行排序,第1张

先解释一下

data是数组

sort是数组类型自带的一个排序函数,函数的参数是一个函数(也就是方法)

然后先看createComparisonFunction函数

这个函数返回了一个方法

其方法参数在返回方法内用到,符合了执行作用域的条件,形成闭包,保留了propertyName函数

然后看你的排序data.sort(createComparisonFunction("name"))

你在排序的时候传入参数createComparisonFunction("name")

在执行sort之前会先执行createComparisonFunction("name")

他会返回一个方法,其执行作用域保留

然后开始走排序

data.sort方法会内部循环值排序,他每次比较的2个值会传入你传入的函数参数内,通过你传入的函数参数来判断排序

最后简单解释下createComparisonFunction

object1: 比较的第一个值

object2: 比较的第二个值

propertyName: 就是执行createComparisonFunction的参数

data["name"]其实就是data.name的另一种写法

function sortNumber(a,b)

{

return a.number - b.number//按印数排名

}

function element(name,number){//name为书名,number是什么印数

this.name=name

this.number=number

this.toString=function(){//关键要重写toString,返回书名

return this.name

}

}

var arr = new Array(3)

arr[0] = new element("x",2000)

arr[1] = new element("y",1000)

arr[2] = new element("z",3000)

document.write(arr.sort(sortNumber))

//定义一个对象数组

 var data = [{ name: "jiang", age: 22 }, { name: "AAAAAAAAAAAAAA", age: 21 }, { name: "CCCCCCCCc", age: 25}]

 //定义一个比较器

function compare(propertyName) {

return function (object1, object2) {

var value1 = object1[propertyName]

var value2 = object2[propertyName]

if (value2 <value1) {

return -1

}

else if (value2 >value1) {

return 1

}

else {

return 0

}

}

}

//使用方法

data.sort(compare("name"))

alert(data[0].name)//jiang

//使用方法

data.sort(compare("age"))

alert(data[0].age)//25s