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

#javascript #function #object

#javascript #функция #объект

Вопрос:

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

  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. Могу ли я спросить, с чем передаются эти аргументы? Вы меня улавливаете?

Ответ №1:

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

Ответ №2:

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

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

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

Если элемент left должен идти перед right, тогда просто верните, -1 в противном случае верните, 1 если right должен идти перед left.

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

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

Ответ №3:

Ваш код для функции 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. В принципе, функция one намного надежнее, чем копирование и вставка кода.