-4

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

{
v: [],
cm: 0
}

这是排序函数的定义:

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

当我运行排序函数时,它什么都不做,只是让数组保持原样。我是 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]);
}
4

2 回答 2

3

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 comparator = function(a,b) {return a.cm - b.cm;}
于 2013-09-01T17:21:17.483 回答
0

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

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”字段吗?

于 2013-09-01T17:22:06.217 回答