我正在尝试对 javascipt 中的一组对象进行排序。排序顺序本身取决于两个因素:对象的属性和单个外部变量的值。我知道我可以使用 array.sort(sortFunction) 来注入自定义函数,但我需要根据外部变量(在排序期间固定)使用不同的函数。
我将排序减少到显示问题的最小测试用例并尝试注入“降序/升序”参数,尽管真正的问题要复杂得多。我知道我可以 reverse() 结果,但这不是问题。
这是代码:
var ar = [ 10, 3, 5, 17 ];
var ns = new nsort();
ar.sort(ns.sort);
console.log(ar);
function nsort()
{
this.desc = true;
this.sort = function(a,b) {
console.log(this.desc);
if (this.desc)
return b-a;
else
return a-b;
}
}
这是输出(使用 Node.js)
undefined
undefined
undefined
undefined
[ 3, 5, 10, 17 ]
看起来数组排序代码在排序时提取了父对象之外的函数。
任何想法为什么会发生这种情况以及正确的方法是什么?
更新:我确实找到了让它工作的方法:
var ar = [ 10, 3, 5, 17 ];
var ns = new nsort(true);
ar.sort(ns.sort);
console.log(ar);
function nsort(desc)
{
this.sort = function(a,b) {
if (desc)
return b-a;
else
return a-b;
}
}
这是一个好主意吗?还是有更好的东西?