尽管设置了排序函数,对象的Javascript数组将不会排序

尽管设置了排序函数,对象的Javascript数组将不会排序,javascript,arrays,sorting,Javascript,Arrays,Sorting,我有一个对象数组,每个对象都包含几个数值。以下是对象的布局: { v: [], cm: 0 } 这是排序函数的定义: registry.sort(function(a,b) {return (a.cm > b.cm) ? 1 : ((b.cm > a.cm) ? -1 : 0);} ); 当我运行sort函数时,它什么也不做,只是让数组保持原样。我是js新手,但据我所知,一切都应该正常。有人知道怎么回事吗 谢谢 编辑:这是我能提取的最小的例子 var registry = [];

我有一个对象数组,每个对象都包含几个数值。以下是对象的布局:

{
v: [],
cm: 0
}
这是排序函数的定义:

registry.sort(function(a,b) {return (a.cm > b.cm) ? 1 : ((b.cm > a.cm) ? -1 : 0);} );
当我运行sort函数时,它什么也不做,只是让数组保持原样。我是js新手,但据我所知,一切都应该正常。有人知道怎么回事吗

谢谢

编辑:这是我能提取的最小的例子

var registry = [];
registry.sort(function(a,b) {return (a.cm > b.cm) ? 1 : ((b.cm > a.cm) ? -1 : 0);} );

var draw = function() {
//various other function calls that add values to the registry array
registry[0] = {v:[0,0,0], cm:3}; //just to have something to use in the variable
registry[1] = {v:[0,0,0], cm:2};
debug(registry[0], registry[1]);
registry.sort();
debug(registry[0], registry[1]);
}
sort()不是配置。当你叫它的时候,它就是这样。您可以这样做:

var comparator = function(a,b) {return (a.cm > b.cm) ? 1 : ((b.cm > a.cm) ? -1 : 0);}
for (var i = 0; i < regPos; i++) {
    debug(registry[i], "eah");        
}
registry.sort(comparator);
registry.reverse();
for (var i = 0; i < regPos; i++) {
    debug(registry[i]);        
}

下面的代码将对具有类似结构的数组“点”进行排序。。。但不确定这是否与您的数据完全匹配

var points = [{v:[1,2,3],cm:40},{v:[2], cm:100},{v:[], cm:1},{cm:5,v:[]},{v:[3],cm:25},{cm:10}];
points.sort(function(a,b) {return (a.cm - b.cm);});

for (x in points) {
    console.log(points[x]);
}

您确定为数组中的每条记录定义了“cm”字段吗?

您需要发布更多信息。您提供的代码没有问题。我在考虑一个完整的工作示例。在新代码中,您现在正在调用
.sort()
,而不传递函数。也许你可以简单地发布不起作用的代码,包括数据。出于某种原因,你漏掉了部分。很抱歉这样对你,但是。。。很抱歉这样对你,但是。。。您不能声明registry.sort(..)然后像那样使用相同的排序比较器…哦,我明白了。调用sort函数时,我必须内联声明sort函数,而不是仅仅“定义”它。非常感谢。
var points = [{v:[1,2,3],cm:40},{v:[2], cm:100},{v:[], cm:1},{cm:5,v:[]},{v:[3],cm:25},{cm:10}];
points.sort(function(a,b) {return (a.cm - b.cm);});

for (x in points) {
    console.log(points[x]);
}