【发布时间】:2015-04-13 09:15:45
【问题描述】:
我有以下数组:
[{"cod_nivel":"INC2","cod_modelo":"D"},
{"cod_nivel":"PRIM1","cod_modelo":"B"},
{"cod_nivel":"INC2","cod_modelo":"B"},
{"cod_nivel":"INC1","cod_modelo":"D"},
{"cod_nivel":"PRIM1","cod_modelo":"D"},
{"cod_nivel":"BAC2","cod_modelo":"B"},
{"cod_nivel":"BAC2","cod_modelo":"D"},
{"cod_nivel":"BAC2","cod_modelo":"A"}]
我需要按“cod_modelo”升序按“cod_nivel”分组来排序这个对象数组。所以结果应该是:
[{"cod_nivel":"INC1","cod_modelo":"D"},
{"cod_nivel":"INC2","cod_modelo":"B"},
{"cod_nivel":"INC2","cod_modelo":"D"},
{"cod_nivel":"PRIM1","cod_modelo":"B"},
{"cod_nivel":"PRIM1","cod_modelo":"D"},
{"cod_nivel":"BAC2","cod_modelo":"A"},
{"cod_nivel":"BAC2","cod_modelo":"B"},
{"cod_nivel":"BAC2","cod_modelo":"D"}]
好的,我编写了这段代码,首先按 cod_nivel 然后按 cod_modelo 对数组进行排序:
var sortedArray = array.sort(function (a, b) {
return (a["cod_nivel"] > b["cod_nivel"]) ? 1 : -1;
}).sort(function (a, b) {
if (a["cod_nivel"] == b["cod_nivel"])
return (a["cod_modelo"] > b["cod_modelo"]) ? 1 : -1;
else
return 0;
});
问题是这段代码也是按“cod_nivel”排序的,所以得到的数组是:
[{"cod_nivel":"BAC2","cod_modelo":"A"},
{"cod_nivel":"BAC2","cod_modelo":"B"},
{"cod_nivel":"BAC2","cod_modelo":"D"},
{"cod_nivel":"INC1","cod_modelo":"D"},
{"cod_nivel":"INC2","cod_modelo":"B"},
{"cod_nivel":"INC2","cod_modelo":"D"},
{"cod_nivel":"PRIM1","cod_modelo":"B"},
{"cod_nivel":"PRIM1","cod_modelo":"D"}]
请注意,BAC2 cod_nivel 对象位于开头。
我需要先按 cod_nivel 订购,但要按照给定的顺序,即:
- INC1
- INC2
- PRIM1
- PRIM2
- BAC1
- BAC2
我假设我需要一个具有“cod_nivel”固定顺序的数组并在排序时使用它,但我不知道如何使用它,所以我没有包含在我的方法中。
var order_arr = ['INC1', 'INC2', 'PRIM1', 'PRIM2', 'BAC1', 'BAC2']
然后,按 cod_modelo(按每个 cod_nivel 分组)排序。
我希望我已经清楚地解释了自己,有人可以帮助我。
【问题讨论】:
-
将您的排序代码放在一个回调中:首先比较
code_nivel属性,如果它们与cod_modelo排序相同。 -
你试过underscorejs.org了吗,用Underscore.js做这样的事情真的很容易
标签: javascript arrays json sorting