我正在尝试使用递归函数将对象的嵌套级别数组转换为单个数组。
下面是我需要转换为单个数组的嵌套级别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;"];
我们非常感谢您的帮助。预先感谢。
答案 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; }