js扁平化json和array【递归方式处理】 - yuzhouxiaogegit/blog GitHub Wiki

js扁平化json和array【递归方式处理】

js扁平化json代码:

【注意事项】内层json名字不建议外层json名称重名,否者内层json对象会覆盖外层json对象

/*

    递归扁平化json对象

    jsonArr 传入json 对象列表 和 json 对象都可以

    注意事项:内层json名字不建议外层json名称重名,否者内层json对象会覆盖外层json对象

*/

function delayeringJson(jsonArr = {}) {
    // 赋值一份,不改变原数组
    jsonArr = JSON.parse(JSON.stringify(jsonArr));
    // 赋值给一个变量,防止闭包内存泄漏
    let innerFun = function (jsons = {}, newJson = {}) {
        for (let i in jsons) {
            // 只处理json对象,不处理数组
            if (jsons[i] instanceof Object && jsons[i] instanceof Array == false) {
                innerFun(jsons[i], newJson);
            } else {
                newJson[i] = jsons[i];
            }
        }
        return newJson;
    }
    return innerFun(jsonArr);
}

// 代码调用示例
var tempObj = [{ name: '张山', age: 35, sex: '男', classB: { page: 1, test: '没有', ren: '计算中' } },{ nameA: '张山', ageA: 35, sexA: '男', classBA: { pageA: 1, testA: '没有', renA: '计算中' } }];
console.log(delayeringJson(tempObj));

js扁平化array代码:

【建议】传入数字和字符串

/*

    递归扁平化json对象

    tempArr 传入数组无限层级得数组

*/

function delayeringArray(tempArr = []) {
    // 解决对象引用类型
    tempArr = JSON.parse(JSON.stringify(tempArr));
    // 赋值给一个变量,防止闭包内存泄漏
    let innerFun = function (tempArr = [], newTempArr = []) {
        for (let i = 0; i < tempArr.length; i++) {
            if (tempArr[i] instanceof Array) {
                innerFun(tempArr[i], newTempArr);
            } else {
                newTempArr.push(tempArr[i]);
            }
        }
        return newTempArr;
    }
    return innerFun(tempArr);
}

// 代码调用示例
var tempArr = [1, 889, 38989, 8989, 555, [5887, '89898989', 1, [5888, 125, [89652, 656], 56556], 8989], 85, 26, 35, 15, 48, 58];
console.log(delayeringArray(tempArr));

js扁平化array代码【简洁版本】:

【缺点】所有的值会被强制转换为字符串,可以满足工作中大部分需求

 // 代码调用示例
 var tempArr = [1, 889, 38989, 8989, 555, [5887, '89898989', 1, [5888, 125, [89652, 656], 56556], 8989], 85, 26, 35, 15, 48, 58];
     tempArr = JSON.stringify(tempArr).replace(/[\[|\]|\'|\"]/g,'').split(',');

     console.log(tempArr)