尽管设置了排序功能,Javascript对象数组也不会排序

时间:2013-09-01 16:57:28

标签: javascript arrays sorting

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

{
v: [],
cm: 0
}

这是sort函数的定义:

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]);
}

2 个答案:

答案 0 :(得分: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;}

答案 1 :(得分:0)

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

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