给定的函数下方是基于多个条件的JS排序函数。我在某些网站上发现了这个很酷的功能。如果有人可以向我解释此功能,那就太好了。
我无法理解它的最后一部分,在其中用a和b变量给它加上另一个括号的情况下调用了它自己。 sortbyMultipleKeys(keys.slice(1))(a,b)
这样调用一个函数;对我来说是全新的f()(a,b)
如果有人可以举例说明,我将不胜感激。 :)
var obj = [
{alpha: 'c',year: 2002},
{alpha: 'b',year: 2004},
{alpha: 'a',year: 2004},
{alpha: 'd',year: 2003},
{alpha: 'a',year: 2002},
{alpha: 'c',year: 2004},
{alpha: 'd',year: 2001},
{alpha: 'b',year: 2002},
{alpha: 'a',year: 2003},
{alpha: 'b',year: 2002},
{alpha: 'd',year: 2001},
{alpha: 'c',year: 2004}
];
function sortbyMultipleKeys(keys) {
return function(a, b) {
if (keys.length == 0) return;
key = keys[0];
if (a[key] > b[key]) return 1;
else if (a[key] < b[key]) return -1;
else return sortbyMultipleKeys(keys.slice(1))(a, b);
}
}
let a = obj.sort(sortbyMultipleKeys(["alpha", "year"]));
console.log(a)
最佳答案
Javascript的特别之处在于您可以从一个函数中返回一个函数。
function foo(){
return function() { console.log('Hello!'); }
}
console.log(foo()); //prints function bar () { console.log('Hello') }
foo()(); //prints Hello!
因此,
sortbyMultipleKeys(keys.slice(1))(a, b)
本质上就是在调用从sortbyMultipleKeys
函数返回的函数。function sortbyMultipleKeys(keys) {
return function(a, b) { //notice how this function is being returned
if (keys.length == ...
}
}
如果您不了解
sortbyMultipleKeys
的工作原理,建议阅读有关“闭包”的文章。例如,当您
console.log(sortbyMultipleKeys(["alpha", "year"]))
,您会看到已打印功能。
/* prints: ƒ (a, b) {
if (keys.length == 0) return;
key = keys[0];
if (a[key] > b[key]) return 1;
else if (a[key] < b[key]) return -1;
else return sortbyMultipleKeys(keys.slice(1))(a, b);
} */
请注意,即使只能在
keys
范围内访问该函数,该函数中仍存在sortbyMultipleKeys
变量。但这要归功于闭包。它可能是此代码中最重要的部分。希望有帮助:)关于javascript - Javascript按多个键排序(快速),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61092480/