有没有办法在javascript中订购这些(alal SELECT * FROM this ORDERBY ....)。所以如果我只是想从对象中将新的列表元素附加到DOM中,而是想控制订单的类型。
var example = [
{id:1, data: { val1: 'val1', val2: 'val2'}, orderById: 313},
{id:2, data: { val1: 'val1', val2: 'val2'}, orderById: 312},
];
var buildString = '';
for ( var i = 0; i < example.length; i++ ) {
// wondering if there is another approach so that i could control the order as I build the string
buildString += "<li class='example-class'>" + example[i].data.val1 + "</li>";
}
$("#some-ul").html('').append(buildString);
所以,如果有更好的方法来实现这个想法,我有兴趣学习......
答案 0 :(得分:3)
数组有一个名为sort的方法,它完全按照您的预期运行。它对数组进行排序。默认情况下,只需比较元素即可完成此操作。但是,在这里,您要对一组对象进行排序,这些对象通常是不可移植的。因此,您必须告诉脚本如何比较项目,如下所示:
example.sort(function(a,b) {
return a.id - b.id;
});
您的功能将针对引擎需要进行的每次比较进行调用(根据排序算法的不同而不同,对我们来说并不重要)。 a
和b
是当前正在比较的元素。该函数必须返回:
a
被认为低于b
,则b
被视为大于b
在这种情况下,我将表达式简化为a.id - b.id
。这是因为根据基本数学:
a.id
小于b.id
,则结果为否定a.id
大于b.id
,则结果为正希望这有帮助!
答案 1 :(得分:-1)
您可以使用可以完全满足您要求的库Sugar:
[{age:35,name:'ken'},{age:15,name:'bob'}].groupBy(function(n) {
return n.age;
});
{"15":[{"age":15,"name":"bob"}],"35":[{"age":35,"name":"ken"}]}
但正如Niet指出的那样,如果你唯一要做的只是一个基本排序,那么本机数组排序就可以了,但是如果它更像你搜索的SQL函数,那么Sugarjs可以提供很大的帮助。 / p>
Else http://www.taffydb.com/也是一个不错的选择,这对你有帮助!