【问题标题】:why if i passed objects into a function, i need not to declare the function arguments in javascript为什么如果我将对象传递给函数,我不需要在 javascript 中声明函数参数
【发布时间】:2011-04-15 14:32:47
【问题描述】:

下面是代码:

 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。我能问一下这些论点是通过什么传递的吗?你抓到我了吗?

【问题讨论】:

    标签: javascript function object


    【解决方案1】:

    当对data 中的元素进行排序时,排序算法必须在两个元素之间进行基本比较,以确定哪个大于另一个。数组对象的sort 方法提供了比较函数来比较它想要比较的两个对象。基本上,您正在为您的对象定义一个

    【讨论】:

      【解决方案2】:

      Array.prototype.sort 接受这样定义的函数

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

      排序函数传递数组的两个元素,然后返回一个数字,说明它们应该按什么顺序排列。

      如果左元素需要在右之前,则返回-1,否则如果右应该在左之前,则返回1

      如果没关系,返回0

      在您的情况下,object1object2 分别是 {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 排序。基本上,一个功能比复制和粘贴代码要强大得多。

        【讨论】:

          猜你喜欢
          • 2012-09-15
          • 1970-01-01
          • 2021-12-31
          • 2018-09-12
          • 2018-09-03
          • 2012-07-06
          • 1970-01-01
          • 2021-06-22
          • 2020-03-22
          相关资源
          最近更新 更多