怎么样根据 JSON 中的某个字段对其进行排序?

发布于 2022-09-05 19:36:07 字数 3046 浏览 15 评论 0

  1. 我有一个 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|粮农" 具体是第二个管道符后面的一个数字(代表这个人的年龄)。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

弄潮 2022-09-12 19:36:07

如果你的意思是,内部排序与外部排序无关的话。
那一样是用数组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的比较字段就行。

兔姬 2022-09-12 19:36:07
function jsonSort(json) {
    if(json["children"].length > 0) {
        json["children"].sort(function(a, b) {
            return b.text.title.split("|")[2]-a.text.title.split("|")[2];
        })
        for(var i = 0; i < json["children"].length; i++) {
            (function(i) {
                jsonSort(json["children"][i])
            })(i)
        }
    }else{
        return false;
    }
}
var returnA = jsonSort(json)
console.log(json)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文