JavaScript 对象数组,根据某个对象属性进行排序

每个函数都是 Function 对象的实例,函数名是一个指向函数对象的指针。

所以可以从一个函数中返回另一个函数。

sort() 方法的参数是一个比较函数,接收两个参数,即比较的值。

function createComparisonFunction(propertyName) {
                                                        // 为什么要在内部添加一个函数,而不是直接进行操作?
    return function(object1, object2){                  // object1 和 object2 是怎么取到值的?
        var value1 = object1[propertyName];
        var value2 = object2[propertyName];
        
        if (value1 < value2){
            return -1;
        } else if (value1 > value2){
            return 1;
        } else {
            return 0;
        }
    };
}

var data = [{name: "Zachary", age: 28}, {name: "Nicholas", age: 29}];
        
data.sort(createComparisonFunction("name"));
alert(data[0].name);          //Nicholas
        
data.sort(createComparisonFunction("age"));
alert(data[0].name);          //Zachary  
两个疑问:

1、object1 和 object2 是怎么取到值的?

数组的sort() 方法接收一个比较函数作为参数,该函数有两个参数,分别为待比较的两个值,即object1 和 object2

2、为什么要在内部添加一个函数,而不是直接进行操作?

这里的 createComparisonFunction() 函数需要一个参数来指定比较排序的依据,不能直接作为sort() 需要的比较参数。所以返回一个符合sort() 要求的函数。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章