【问题标题】:Sorting an array of objects numerically using inline function使用内联函数对对象数组进行数字排序
【发布时间】:2017-11-30 14:57:20
【问题描述】:
我有一个 js 对象数组,我需要根据面积 h*w 对其进行排序。也就是说,每个对象都有 {h,w}。我没有得到排序后的数组。
我有一个如图所示的数组,
var blocks = [];
blocks.push({
w: 320,
h: 135
});
blocks.push({
w: 320,
h: 270
});
blocks.push({
w: 320,
h: 135
});
blocks.push({
w: 320,
h: 135
});
blocks.push({
w: 320,
h: 135
});
blocks.sort(function(a, b) {
return (b.w * b.h < a.w * a.h);
});
console.log(JSON.stringify(blocks));
【问题讨论】:
标签:
javascript
arrays
sorting
numbers
【解决方案1】:
使用- 运算符:
blocks.sort(function(a, b) {
return b.w * b.h - a.w * a.h;
});
如果sort的回调返回:
- 一个负数,那么
sort将把a放在b之前
-
0,然后a 和b 相等,sort 将决定谁在谁之前。
- 一个正数,那么
sort 将把b 放在a 之前。
注意:上面的代码是对数组进行降序排序,如果要颠倒排序,则直接返回a.w * a.h - b.w * b.h即可。
【解决方案2】:
你需要使用减号,检查这个sn-p
var blocks=[]
blocks.push({
w: 320,
h: 135
});
blocks.push({
w: 320,
h: 270
});
blocks.push({
w: 320,
h: 135
});
blocks.push({
w: 320,
h: 135
});
blocks.push({
w: 320,
h: 135
});
blocks.sort(function(a, b) {
return (b.w * b.h - a.w * a.h);
});
console.log(blocks);