【发布时间】:2014-05-17 23:29:27
【问题描述】:
我需要根据匹配的“超过”“低于”赔率之间的差异对如下数组进行排序,因此最平衡的结果会出现在主数组的第一行!
var object = [
[{"0.5": { "over": 1.2, "under": 3.8 }}], //difference 2.6
[{"1.5": { "over": 1.5, "under": 2.8 }}], //difference 1.3
[{"2.5": { "over": 1.9, "under": 2.0 }}], //difference 0.1
[{"2.5": { "over": 2.2, "under": 1.8 }}], //difference 0.4
];
这样
var object = [
[{ "2.5": { "over": 1.9, "under": 2.0 } }], //difference 0.1
[{ "2.5": { "over": 2.2, "under": 1.8 } }], //difference 0.4
[{ "1.5": { "over": 1.5, "under": 2.8 } }], //difference 1.3
[{ "0.5": { "over": 1.2, "under": 3.8 } }], //difference 2.6
];
我已经阅读了这篇文章,但对我的情况没有任何帮助
Sort Complex Array of Arrays by value within
我刚刚解决了。谢谢大家!
var obj = [{ value: 0.5, over: 1.2, under: 3.8 },
{ value: 1.5, over: 1.5, under: 3.2 },
{ value: 2.5, over: 1.8, under: 2.5 },
{ value: 3.5, over: 1.9, under: 1.9 },
{ value: 3.5, over: 2.5, under: 1.75 }];
obj.sort(function(a,b) {
return Math.min(Math.abs(parseFloat(b.over) - parseFloat(a.under)));
});
【问题讨论】:
-
怎么没有帮助?它向您展示了如何通过传递自定义比较回调函数对数组进行排序。您需要做的就是对主数组进行排序,并在回调中比较其中的两项。
-
那里的数组太多,不需要嵌套数组。如果你只是使用一个 colleciton,你可以试试 Underscore 的
sortBy -
function(a,b) {return Math.abs(a.over-a.under) - Math.abs(b.over-a.under);} -
@NiettheDarkAbsol:如果 OP 没有嵌套所有内容,这将起作用。我会考虑修复它的来源,所以我得到了一个不错的数据结构。
-
@elclanrs 哦,是的。我猜
a[0].over等。但是,是的,过度嵌套。
标签: javascript arrays