const obj2arr = (data, level) => {
const dataKeys = "object" === typeof(data) && !Array.isArray(data) && Object.keys(data);
let results = [];
if (!!dataKeys) {
for (let dataKey of dataKeys) {
let obj = {
name: dataKey
}
obj["values"] = data[dataKey] || null;
if ("object" === typeof(data[dataKey]) && !Array.isArray(data[dataKey]) &&
data[dataKey] && "object" === typeof(data[dataKey]) && level > 0) {
obj["values"] = obj2arr(data[dataKey], level);
--level
}
level
results = [...results, obj];
}
}
return results
}
let b = {
a: [1, 2],
b: 3,
c: 'c',
d: {
d1: 'bla',
d2: 'ble',
d3: {
e: 1,
f: [1, 2],
g: 'bli',
h: {
h1: 1,
h2: 2
}
}
}
};
res = obj2arr(b, 1);
console.log(res);
uj5u.com熱心網友回復:
你不應該有這些level 和level--指示。而是傳遞level - 1給遞回呼叫:
obj["values"] = obj2arr(data[dataKey], level - 1);
這樣,您已經擁有的條件 ( level > 0) 將確保僅在給定級別進行轉換。
我沒有在您的代碼中觸及任何其他內容:
const obj2arr = (data, level) => {
const dataKeys = "object" === typeof(data) && !Array.isArray(data) && Object.keys(data);
let results = [];
if (!!dataKeys) {
for (let dataKey of dataKeys) {
let obj = {
name: dataKey
}
obj["values"] = data[dataKey] || null;
if ("object" === typeof(data[dataKey]) && !Array.isArray(data[dataKey]) &&
data[dataKey] && "object" === typeof(data[dataKey]) && level > 0) {
obj["values"] = obj2arr(data[dataKey], level - 1);
}
results = [...results, obj];
}
}
return results
}
let b = {
a: [1, 2],
b: 3,
c: 'c',
d: {
d1: 'bla',
d2: 'ble',
d3: {
e: 1,
f: [1, 2],
g: 'bli',
h: {
h1: 1,
h2: 2
}
}
}
};
res = obj2arr(b, 1);
console.log(res);
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/405876.html
標籤:
