使用父/子关系对多个属性进行排序

时间:2016-03-18 13:45:59

标签: javascript sorting

我有一个对象数组:

    a {bindSortorder: 4, bindParentid: -1, bindQuestionid: 371}
    b {bindSortorder: 2, bindParentid: -1, bindQuestionid: 800}
    c {bindSortorder: 4, bindParentid: 23, bindQuestionid: 123}
    d {bindSortorder: 1, bindParentid: -1, bindQuestionid: 371}
    e {bindSortorder: 4, bindParentid: 371, bindQuestionid: 456}
    f {bindSortorder: 3, bindParentid: -1, bindQuestionid: 371}
    g {bindSortorder: 2, bindParentid: 800, bindQuestionid: 223}

我需要按以下结构对它们进行排序:

排序顺序

    • 儿童(问题)

...以便上面的例子会产生以下顺序:

d b G F 一个 Ë ç

如果" -1"表示要将父级更改为其他值,我对此持开放态度。我只是试图通过确保它不能等于实际的Questionid来将它从排序方程中取出来。

我已经写了以下内容,它们成功地优先排序顺序并将孩子们组合在一起......但是他们并没有按照他们各自的父母分组。然而,所有的父母都归为一类。

    return (aSortorder < bSortorder ? -1 : (aSortorder > bSortorder) ? 1 : ((aParentid < bParentid) ? -1 : ((aParentid > bParentid) ? 1 : 0)));

任何帮助将不胜感激。感谢

1 个答案:

答案 0 :(得分:0)

以下是我如何解决它:

SortQuestionsByParent:function(a,b){
    var aElm = $(a).data();
    var bElm = $(b).data();     
    var aParent = aElm.bindParentid;
    var bParent = bElm.bindParentid;
    var aQuestionId = aElm.bindQuestionid;
    var bQuestionId = bElm.bindQuestionid;
    var aOrder = aElm.bindSortorder;
    var bOrder = bElm.bindSortorder;
    var aTempId;
    var bTempId;
    (aParent < 0) ? aTempId = aQuestionId + ".5" : aTempId = aParent + ".9";
    (bParent < 0) ? bTempId = bQuestionId + ".5" : bTempId = bParent + ".9";
    var result = aOrder - bOrder || aTempId - bTempId;
    console.log(result);        
    return result;
}
相关问题