首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我怎样才能先排序一个值,而不是另一个呢?

我怎样才能先排序一个值,而不是另一个呢?
EN

Stack Overflow用户
提问于 2015-11-18 11:18:10
回答 4查看 45关注 0票数 0

这是我的代码

代码语言:javascript
复制
<div id="fascia-filtri-etichette">
    <div data-title="m" data-preorder="order-2" class="item">m</div>    
    <div data-title="2013" data-preorder="order-3" class="item">2013</div>    
    <div data-title="2012" data-preorder="order-3" class="item">2012</div>
    <div data-preorder="order-4" id="fascia-filtri-etichette-cancella">DELETE</div>
    <div data-title="E" data-preorder="order-1" class="item">E</div>
    <div data-title="S" data-preorder="order-1" class="item">S</div>
    <div data-title="2014" data-preorder="order-3" class="item">2014</div>
</div>

<script>
    var items = $("#fascia-filtri-etichette" + ' > div');
    items.sort(function (a, b) {
        return a.getAttribute('data-title') > b.getAttribute('data-title') || a.getAttribute('data-preorder') > b.getAttribute('data-preorder');
    }).detach().appendTo($("#fascia-filtri-etichette"));    
</script>

我想首先为pre-order字段订购(升序)div,而不是(因此,对于前面的每个块)的标题。

其结果应该是:

代码语言:javascript
复制
E // order 1
S // order 1
m // order 2
2012 // order 3
2013 // order 3
2014 // order 3
DELETE // order 4

我哪里错了?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-11-18 11:30:05

你在这里的错误是

  1. 排序函数应该是-1、0或1,不是真/假。
  2. 代码是杂乱无章的,很难检查它是如何工作的。我不知道你是如何把标题排序和预定顺序结合起来的,而且可能是错误的。

它应该是这样的

代码语言:javascript
复制
items.sort(function (a, b) {
    var po = a.getAttribute('data-preorder').localeCompare(b.getAttribute('data-preorder'));
    if(po != 0) return po;

    return a.getAttribute('data-title').localeCompare( b.getAttribute('data-title'));
});

首先,它应该去检查预定,然后比较标题。下面是工作示例http://jsfiddle.net/rczjm4ph/

票数 3
EN

Stack Overflow用户

发布于 2015-11-18 11:21:40

使用2个排序函数而不是一个。测试用例http://jsfiddle.net/a47xv32f/

代码语言:javascript
复制
var items = $("#fascia-filtri-etichette" + ' > div');
items.sort(function (a, b) {
    return a.getAttribute('data-title') > b.getAttribute('data-title');
}).sort(function (a, b) {
    return a.getAttribute('data-preorder') > b.getAttribute('data-preorder');
}).detach().appendTo($("#fascia-filtri-etichette"));    
票数 1
EN

Stack Overflow用户

发布于 2015-11-18 11:31:36

它仍然可以用一个sort()来完成。

代码语言:javascript
复制
var items = $("#fascia-filtri-etichette" + ' > div');
items.sort(function (a, b) {
    var cmpOrder = a.getAttribute('data-preorder').localeCompare(b.getAttribute('data-preorder'));

    if (cmpOrder !== 0) return cmpOrder;

    return a.getAttribute('data-title').localeCompare(b.getAttribute('data-title'));
});    
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33778687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档