代码之家  ›  专栏  ›  技术社区  ›  user2935236

需要使用javascript将对象数组转换为单个数组的帮助

  •  0
  • user2935236  · 技术社区  · 6 年前

    我正在尝试使用递归函数将对象的嵌套级别数组转换为单个数组。

    下面是我需要转换为单个数组的嵌套级JSON对象

    [{"CodiacSDK.NewModule.dll;extensionCreatePre;":[{"CodiacSDK.NewModule.dll;extensionExecutePost;":[{"CodiacSDK.PythonWrapper.dll;UnitValues::extensionInquirePre;":[]}]}]}]
    

    我尝试了许多递归函数,但没有一个能按照我的要求工作。

    像这个一样

    function flatten(obj) {
    var empty = true;
    if (obj instanceof Array) {
        str = '[';
        empty = true;
        for (var i=0;i<obj.length;i++) {
            empty = false;
            str += flatten(obj[i])+', ';
        }
        return (empty?str:str.slice(0,-2))+']';
    } else if (obj instanceof Object) {
        str = '{';
        empty = true;
        for (i in obj) {
            empty = false;
            str += i+'->'+flatten(obj[i])+', ';
        }
        return (empty?str:str.slice(0,-2))+'}';
    } else {
        return obj; // not an obj, don't stringify me
    }
    

    }

    我期望的输出是

    ["CodiacSDK.NewModule.dll;extensionCreatePre;", "CodiacSDK.NewModule.dll;extensionExecutePost;", "CodiacSDK.PythonWrapper.dll;UnitValues::extensionInquirePre;"];
    

    任何帮助都非常感谢。事先谢谢。

    1 回复  |  直到 6 年前
        1
  •  2
  •   Nina Scholz    6 年前

    function getFlat(array) {
        return array.reduce(
            (r, o) => Object.entries(o).reduce((p, [k, v]) => [k, ...getFlat(v)], r),
            []
        );
    }
    
    var data = [{ "CodiacSDK.NewModule.dll;extensionCreatePre;": [{ "CodiacSDK.NewModule.dll;extensionExecutePost;": [{ "CodiacSDK.PythonWrapper.dll;UnitValues::extensionInquirePre;": [] }] }] }]
    
    console.log(getFlat(data));
    .as-console-wrapper { max-height: 100% !important; top: 0; }