почему, если я передал объекты в функцию, мне не нужно объявлять аргументы функции в javascript - PullRequest
1 голос
/ 15 апреля 2011

Ниже приведен код:

 function createComparisonFunction(propertyName){

         return function(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);

    data.sort(createComparisonFunction("age"));
    alert(data[0].name);

Как вы можете видеть, функция createCompatisonFunction заполнена значением name и, как вы можете видеть внутри этой функции, есть object1 и object2. Могу я спросить, с чем связаны эти аргументы? Ты меня ловишь?

Ответы [ 3 ]

3 голосов
/ 15 апреля 2011

при сортировке элементов в data алгоритм сортировки должен будет выполнить элементарное сравнение между двумя элементами, чтобы определить, какой из них больше другого. Метод sort объектов массива предоставляет функции сравнения два объекта, которые он хочет сравнить. По сути, вы определяете <оператор сортировки для вашего объекта. </p>

2 голосов
/ 15 апреля 2011

Array.prototype.sort принимает функцию, которая определена как таковая

function(left, right) {
    return new Number();
}

Функция сортировки передает два элемента массива, и вы возвращаете число, указывающее, в каком порядке они должны идти.

Если левый элемент должен идти перед правым, просто верните -1, в противном случае верните 1, если правый должен предшествовать левому.

вернуть 0, если это не имеет значения.

В вашем случае object1 и object2 равны {name: "Zachary", age: 28} и {name: "Nicholas", age: 29} соответственно.

1 голос
/ 15 апреля 2011

Ваш код для функции createComparisonFunction - это функция, которая возвращает функцию.

По сути, ваш код ничем не отличается от следующего:

var data = [{name: "Zachary", age: 28}, {name: "Nicholas", age: 29}];

data.sort(function(object1, object2){
  var value1 = object1["name"];
  var value2 = object2["name"];
  if(value1 < value2){
    return -1;
  }else if(value1 > value2){
    return 1;
  }else{
    return 0;
  }
}); 

alert(data[0].name);

data.sort(function(object1, object2){
  var value1 = object1["age"];
  var value2 = object2["age"];
  if(value1 < value2){
    return -1;
  }else if(value1 > value2){
    return 1;
  }else{
    return 0;
  }
});
alert(data[0].name);

И целью создания createComparisonFunction(propertyName) является рефакторинг копии и вставки кода в одну область, что облегчает управление кодом. Также обратите внимание, что если ваш объект данных также содержит свойство с именем «lastname», эту функцию также можно использовать для сортировки по LastName. По сути, одна функция гораздо надежнее, чем копирование и вставка кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...