在使用JavaScript将对象数组转换为单个数组时需要帮助

时间:2018-07-30 10:59:26

标签: javascript json

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

下面是我需要转换为单个数组的嵌套级别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 个答案:

答案 0 :(得分:2)

您可以使用递归函数来展平对象数组。

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; }