父子分组的数据进行排序:一般试用于多维查询

本文介绍了一种用于处理部门和员工等父子数据结构的排序算法。该算法首先对父级数据(如部门)进行排序,然后对每个父级下的子级数据(如员工)进行排序。适用于需要对具有层级关系的数据进行有序展示的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于这样的应用场景,部门和员工这个的父子数据 如下

部门1       订单数 

人员1       订单数 

人员2       订单数

部门2       订单数

人员3        订单数  

人员4        订单数

人员5        订单数


把这样的数据,分到表格中,按部门排序,再进入部门后按人员排序


//对数据进行排序
function dealSord(data){
//先处理父级的排序
var parentdata = dealParent(data);

//处理子级的排序
var result = new Array();

result.push(data[0]);

var subdata = dealSub(parentdata);

for(var i=0 ; i<subdata.length ; i++){
result.push(subdata[i]);
}

return result;
}


**
 * 处理父级
 * @param data
 * @returns {Array}
 */
function dealParent(data){
var compare = new Array();
var topcompare = new Array();

for(var i =1; i<data.length ;i++){
if(data[i][1].value == "null"){
compare.push({
"name" : data[i][0].value,
"value" : data[i][6].value
})
}
}

compare.sort(compareValue);

var count = 10 < compare.length ? 10 : compare.length;
for(var i=0;i< count ;i++){
topcompare[i] = compare[i];
}

var newdata = new Array();

var a=0;
for(var k=0 ; k<topcompare.length ;k++){
for(var i=0; i<data.length ; i++){
if(topcompare[k].name == data[i][0].value ){
newdata[a] = data[i];
a++;
}
}
}

return newdata;
}


var tempParentSub = new Array();
function dealSub(data){

var comparesub = new Array();
var topsub = new Array();

tempParentSub.length=0;//清空数组

//按照父级将子级分组,插入排序 
var tempParent = "";
var tempSub;

for(var k=0 ; k<data.length ; k++){
if(data[k][1].value=="null"){
tempParent = data[k][0].value;
tempSub = new Array();
tempParentSub.push(tempSub);
}

if(data[k][0].value == tempParent && data[k][1].value!="null"){

tempSub.push({
"parentname" :  data[k][0].value,
"subname" :    data[k][1].value,
"value" :      data[k][6].value
});

tempSub.sort(compareValue);
}
}

var temp = new Array();
for(var j=0;j<tempParentSub.length;j++){
for(var i=0 ; i<tempParentSub[j].length;i++){
// if(i>9){//取前10个sku
// break;
// }
temp.push(tempParentSub[j][i]);
}
}

var newsub = new Array();
var a=0;
var parentname ="";
var subname="";
var setparent = false;

for(var k=0;k<temp.length;k++){
if(parentname!=temp[k].parentname){
setparent = true;
parentname = temp[k].parentname;
}else{
setparent = false;
}
for(var m=0;m<data.length;m++){
if(parentname == data[m][0].value && 
data[m][1].value=="null" && setparent){

newsub[a] = data[m];
a++;
continue;
}
if(temp[k].subname == data[m][1].value){

var value = data[m][6].value; 

if(temp[k].value == value){
newsub[a] = data[m];
a++;
break;
}
}

}

}
return newsub;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值