1

有没有办法在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);

所以如果有更好的方法来实现这个想法,我有兴趣学习......

4

2 回答 2

3

数组有一个名为sort的方法,它完全符合您的预期。它对数组进行排序。默认情况下,这只是通过比较元素来完成。但是,在这里您正在对一组对象进行排序,这些对象通常是不可排序的。因此,您必须告诉脚本如何比较项目,如下所示:

example.sort(function(a,b) {
    return a.id - b.id;
});

引擎需要进行的每次比较都会调用您的函数(根据内部使用的排序算法而有所不同,对我们来说并不重要)。a并且b是当前正在比较的元素。该函数必须返回:

  • 一个负数 ifa被认为小于b
  • 一个正数 ifb被认为大于b
  • 如果项目被视为相等,则为零。

在这种情况下,我将表达式简化为a.id - b.id. 那是因为根据基本数学:

  • 如果a.id小于b.id,则结果为负
  • 如果a.id大于b.id,则结果为正
  • 如果它们相等,则结果为零

希望这可以帮助!

于 2013-10-16T13:02:01.657 回答
-1

您将使用可以完全满足您的需求的库 Sugar:

http://sugarjs.com/api

[{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 会很有帮助。

否则http://www.taffydb.com/也是一个不错的选择,对您有很大帮助!

于 2013-10-16T13:03:47.113 回答