Javascript 按属性值对对象进行排序
我在数组中有一些对象,希望对它们进行排序。对象应按度量值排序。所以我有以下功能:Javascript 按属性值对对象进行排序,javascript,jquery,sorting,Javascript,Jquery,Sorting,我在数组中有一些对象,希望对它们进行排序。对象应按度量值排序。所以我有以下功能: objectz.sort(function(a,b){ return b.metric - a.metric; } 问题是有些对象具有相同的属性值,排序的结果总是不同的。我想通过名称属性对具有相同度量值的对象进行额外排序,以便每次排序时都得到相同的对象顺序 提前谢谢 类似于虫族: objectz.sort(function(a,b){ var result = b.metr
objectz.sort(function(a,b){
return b.metric - a.metric;
}
问题是有些对象具有相同的属性值,排序的结果总是不同的。我想通过名称属性对具有相同度量值的对象进行额外排序,以便每次排序时都得到相同的对象顺序
提前谢谢 类似于虫族:
objectz.sort(function(a,b){
var result = b.metric - a.metric;
if (!result) return a.name > b.name ? 1 : -1;
return result;
});
objectz.sort(function(a,b) {
var x = b.metric - a.metric;
return x || b.name - a.name;
});
似乎是一种反向排序(先出现较高的值),这是您想要的吗
编辑
请注意,-
运算符仅适用于“name”的值可以转换为数字的情况。否则,请使用
。sort函数应该处理a.name==b.name,这是
操作符本身无法处理的,因此您需要类似以下内容:
objectz.sort(function(a,b) {
var x = b.metric - a.metric;
// If b.metric == a.metric
if (!x) {
if (b.name == a.name) {
x = 0;
else if (b.name < a.name) {
x = 1;
else {
x = -1;
}
}
return x;
});
如果有必要说塞尔达比安先来。此外,
name
的值应减少为所有小写(或所有大写),否则“zelda”和“Ann”将按与“zelda”和“Ann”相反的顺序排序与b.metric-a.metric
完全相同。当''a'-'b'
为我返回NaN
时,-
操作符将首先将两侧转换为数字。我假设name
属性存储字符串,如果name
无法转换为数字,它将返回NaN。将添加注释。(b.name==a.name)?0
是没有意义的,只要你没有其他标准-你可以返回1
或-1
,这不会改变任何东西根据比较函数“应该是一个接受两个参数x和y的函数,如果xobjectz.sort(function(a,b) {
var x = b.metric - a.metric;
if (!x) {
x = (b.name == a.name)? 0 : (b.name < a.name)? 1 : -1;
}
return x;
});
x = (b.name == a.name)? 0 : (b.name < a.name)? -1 : 1;