Javascript 基于父/子关系的多属性排序

Javascript 基于父/子关系的多属性排序,javascript,sorting,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, bindQ

我有一个对象数组:

    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}
我需要按照以下结构对它们进行排序:

排序器

  • 母公司

    • 儿童(问题ID)
…因此,上述示例将产生以下顺序:

d B G F A. E c

如果有必要将表示父对象的“-1”更改为其他值,我愿意这样做。我只是想通过确保它不能等于一个实际的问题ID,来把它从排序方程中去掉

我已经写了以下内容,成功地将排序顺序和孩子分组在一起……但他们并没有分组在各自的父母之下。然而,所有的父母都被分组在一起

    return (aSortorder < bSortorder ? -1 : (aSortorder > bSortorder) ? 1 : ((aParentid < bParentid) ? -1 : ((aParentid > bParentid) ? 1 : 0)));
return(aSortorderbSortorder)?1:((aParentidbParentid)?1: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;
}
SortQuestionsByParent:函数(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 aoorder=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;
控制台日志(结果);
返回结果;
}

为什么e在c之前?和g之前的b?对于一般算法,见E在C之前,因为E的父ID=371,使得E是a的子(其问题ID为371)将它们都放在C之前