js深拷贝对象并根据key字母排序-摘要

let data = {
    "params": {
      "id": 514,
        "storeCode": "5139",
        "channelKey": "XINXIANG",
        "channelOrderSn": "2513920051119292641272",
        "status": "CHECKING",
        "return_type": "FULL",
        "createdAt": "2020-05-13 13:58:47",
        "goodsList": [
            {
                "spuCode": "660317",
                "goodsName": "招牌拌面葱油味1袋",
                "quantity": 1
            },
            {
                "spuCode": "660313",
                "goodsName": "招牌劲道风味拌面1盒",
                "quantity": 1
            },
            {
                "spuCode": "660321",
                "goodsName": "招牌拌面椒麻味1袋",
                "quantity": 1
            }
        ]
    },
    "serverKey": "oms",
    "format": "json",
    "sign": "{{sign}}",
    "timestamp": "{{timestamp}}",
    "version": "1.0"
}
// 检测数据类型
function checkedType(data) {
    return Object.prototype.toString.call(data).slice(8, -1)
}
// 将对象排序
function sortObj(obj) {
    if (checkedType(obj) === 'Object') {
        var keys = Object.keys(obj).sort();
        var arr = {};
        for (var i in keys) {
            var a = obj[keys[i]];
            arr[keys[i]] = obj[keys[i]];
        }
        return arr;
    } else {
        return obj;
    }
}

function cloneAndSort(data) {
    let result;
    let dataType = checkedType(data);
    if (dataType === 'Object') { // 对象
        result = {}
    } else if (dataType === 'Array') { // 数组
        result = []
    } else {
        return data;
    }
    
    for (let i in data) {
        if (checkedType(data[i]) === 'Object' || checkedType(data[i]) === 'Array') { //对象/数组里嵌套了对象/数组,递归
            result[i] = cloneAndSort(data[i]);
        } else { 
            result[i] = data[i];
        }
    }
    return sortObj(result);
}

console.log('排序key之后的结果', cloneAndSort(data));
posted @   微人类  阅读(324)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示