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

贾斯汀

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

因此,如果有完全更好的方法来实现这个想法,我有兴趣学习...

不是黑暗的绝对

数组有一个称为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,则结果为正
  • 如果它们相等,则结果为零

希望这可以帮助!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章