我为sort
对象编写了一个简单的函数,但没有预料到它会起作用,但确实如此:
function sortObjs(objArr,field) {
objArr.sort(
function(a,b) {
if( isNaN(a[field]) ) {
return a[field].localeCompare(b[field]);
} else {
return parseFloat(a[field]) - parseFloat(b[field])
}
}
);
return objArr;
}
当我调用此函数时,我得到了排序的对象而没有问题。但是我没想到它会起作用,因为我认为前两个return语句会在它到达最后一个语句之前退出函数:return objArr
。
答案 0 :(得分:2)
你有一个嵌套的功能。前两个返回将退出内部函数,而最后一个将退出外部函数。
修改强>
您可以将函数返回视为使用返回值“替换”函数。例如:
var i = getSum(1, 3);
function getSum(a, b) {
return a + b;
}
函数getSum返回a和b的总和。第var i = getSum(1, 3)
行将使用a = 1
和b = 3
执行函数中包含的代码行。返回的值“替换”函数调用。所以现在代码行看起来像var i = 4;
。虽然这不是完全它是如何工作的,但它是一种概念化它的好方法。这是一种特殊情况,因为您实际上并未在此处运行内部方法,而是将其作为变量传递。
如果您还有其他问题,请与我们联系!
答案 1 :(得分:1)
要理解为什么内部函数的Array.prototype.sort()
语句不会对外部作用域中的return语句产生影响,您需要了解compareFunction
函数的工作原理。
函数arr.sort([compareFunction])将函数作为参数。
的compareFunction 可选的。指定定义排序顺序的函数。 如果省略,则根据每个字符的Unicode代码点值对数组进行排序, 根据每个元素的字符串转换。
compareFunction
内写的逻辑会被执行
java脚本引擎尝试比较它的两个元素
比较操作。return objArr;
作为参数
将用于获取基于两个元素可以的值
进行比较并不退出排序操作,单独退出
外部功能。话虽如此,代码public function add(PostFormRequest $request)
{
if (Input::get('title')) {
$post = new Post(Input::all());
if ($post->save()) {
return redirect('posts');
}
}
return view('add_post');
}
不起作用,因为数组将被排序in place。