我有一个对象数组,每个对象包含几个数值。这是对象的布局:
{
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]);
}
答案 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”字段吗?