我有一个
json
,具体格式如下:
{ "text": { "name": "待确定", "desc": "22146", "title": "1" }, "children": [{ "text": { "name": "王小和", "desc": "12037", "title": "0|王小和|78|192|无业" }, "children": [{ "text": { "name": "陈合松", "desc": "5944", "title": "0|陈合松|50|192|粮农" }, "children": [], "image": "/Images/40-60.png" }], "image": "/Images/60.png" }, { "text": { "name": "王用兵", "desc": "12071", "title": "0|王用兵|72|192|粮农" }, "children": [{ "text": { "name": "王新艳", "desc": "6247", "title": "0|王新艳|39|192|粮农" }, "children": [{ "text": { "name": "王浩洋", "desc": "20955", "title": "0|王浩洋|8|192|/" }, "children": [], "image": "/Images/3-9.png" }], "image": "/Images/30-40.png" }], "image": "/Images/60.png" }, { "text": { "name": "王和木", "desc": "12076", "title": "0|王和木|76|192|无业" }, "children": [{ "text": { "name": "王宇松", "desc": "6304", "title": "0|王宇松|47|192|粮农" }, "children": [{ "text": { "name": "王权", "desc": "20370", "title": "0|王权|16|192|/" }, "children": [], "image": "/Images/9-18.png" }], "image": "/Images/40-60.png" }], "image": "/Images/60.png" }, { "text": { "name": "王水红", "desc": "12096", "title": "0|王水红|77|192|无业" }, "children": [], "image": "/Images/60.png" }, { "text": { "name": "王吉恒", "desc": "11868", "title": "0|王吉恒|73|192|粮农" }, "children": [{ "text": { "name": "王小兵", "desc": "3966", "title": "0|王小兵|44|192|粮农" }, "children": [], "image": "/Images/40-60.png" }], "image": "/Images/60.png" }, { "text": { "name": "王和龙", "desc": "15862", "title": "0|王和龙|66|192|粮农" }, "children": [], "image": "/Images/60.png" }], "image": "/Images/userpic_default.png"}
每个 children
里是一个数组,我需要排序的就是这个数组里面的元素,每个元素中又有 children
,所有的 children
都要进行排序。其实就是一颗树,然后排序的话是依据 text
中的 title
来进行降序排。
"0|陈合松|50|192|粮农"
具体是第二个管道符后面的一个数字(代表这个人的年龄)。
解决方案
如果你的意思是,内部排序与外部排序无关的话。
那一样是用数组sort方法进行排序。再然后,逐层递归,或者每一个'childre'遍历排序就可以了。
var arr = [{ "text": { "title": "1" }, "children": [{ "text": { "title": "0" }, "children": [{ "text": { "title": "1" } }] },{ "text": { "title": "4" }, "children": [{ "text": { "title": "1" }, "children": [{ "text": { "title": "3" }, "children": [{ "text": { "title": "1" } }, { "text": { "title": "0" } }] },{ "text": { "title": "2" } } ] }] },{ "text": { "title": "3" }, "children": [{ "text": { "title": "1" } }] }]},{ "text": { "title": "0" }, "children": [] }];function sortFn(a, b){ if(a["text"]["title"] < b["text"]["title"]){ return 1; }else if(a["text"]["title"] < b["text"]["title"]){ return -1; }else{ return 0; }}function fn1(item){ if(item["children"]){ item["children"].sort(sortFn); arrFn(item["children"]); }else{ return 0; }}function arrFn(arr){ arr.forEach(function(item){ fn1(item); });}arrFn(arr);arr.sort(sortFn);console.log(arr);
数据做了简化处理,所以'titile'这里也偷了懒。 比较的title字段,可以自己写正则,或者如下
var str = "0|张三|49";var age = str.split('|')[3];
获取到之后,再比较,简单加到sortFn的比较字段就行。