为什么如果我将对象传递到函数中,我不需要在javascript中声明函数参数
why if i passed objects into a function, i need not to declare the function arguments in 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。我能问一下这些参数都带了什么吗?你明白我的意思吗?
在排序data
中的元素时,排序算法必须在两个元素之间执行基本比较,以确定哪个元素大于另一个元素。数组对象的sort
方法,提供了它要比较的两个对象的比较函数。基本上你是在定义<</p>
Array.prototype.sort
接受如下定义的函数
function(left, right) {
return new Number();
}
给排序函数传递数组的两个元素,然后返回一个数字,说明它们的排列顺序。
如果左元素需要在右元素之前,则返回-1
,否则返回1
,如果右元素应该在左元素之前。
如果不重要则返回0
。
在您的例子中,object1
和object2
分别是{name: "Zachary", age: 28}
和{name: "Nicholas", age: 29}
。
函数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排序。基本上,一个函数要比复制和粘贴代码健壮得多。
相关文章:
- 使用一个Javascript函数提交多个表单可以在FF中工作,而不需要其他浏览器
- Jquery/javascript:加载页面时不需要的重复函数
- jQuery,函数中不需要重复执行函数,动态加载内容后
- 如何重新编码我的jQuery/JavaScript函数,使其更通用,不需要唯一标识符
- Javascript/JQuery 中的匿名函数的目的是什么,当我似乎不需要它时
- 函数不't在添加括号的情况下调用它时运行(即使它不需要参数)
- 当函数不需要 Javascript 时访问参数
- 为什么在成功函数的末尾不需要有“()”
- HTML图像“onclick”在调用javascript函数时重定向到另一个页面(不需要)
- 不需要的事件处理程序函数正在 jQuery 中执行
- 一个不需要输入错误消息的assert函数
- 函数.调用类似数组的对象,不需要第一个参数
- 空格键在运行javascript函数时导致不需要的文本
- 用jquery函数上传图像或文件,只需要它,不需要php,也不需要更多的代码
- 奇怪的字符编码问题导致js函数失败或添加不需要的字符
- 为什么我不需要在Sails.js控制器函数中调用next,即使它在其主体中有一个(异步的?)数据库查询
- 如何在.MVC 3 Razor中只触发一个JavaScript函数,而不需要控制器处理请求
- Jquery:将一个函数传递给另一个不需要的函数
- three.js lookat()函数不能按我的需要工作
- 未捕获的类型错误:需要1个参数,但只存在0..但我的函数不需要任何参数