在javascript中按对象内的数字/ id排序

时间:2013-10-16 12:56:21

标签: javascript jquery object

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

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

2 个答案:

答案 0 :(得分:3)

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

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

您的功能将针对引擎需要进行的每次比较进行调用(根据排序算法的不同而不同,对我们来说并不重要)。 ab是当前正在比较的元素。该函数必须返回:

    如果a被认为低于b ,则
  • 为负数
  • 如果b被视为大于b
  • ,则为正数
  • 如果项目被视为相等则为零。

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

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

希望这有帮助!

答案 1 :(得分:-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可以提供很大的帮助。 / p>

Else http://www.taffydb.com/也是一个不错的选择,这对你有帮助!