2 回答

TA貢獻1807條經驗 獲得超9個贊
因此,讓我們刪除無用的上下文。您想要深入查找對象中的“主機名”值。
并且您的遞歸似乎循環,導致超出最大調用堆棧大小錯誤。
怎么才能自己發現問題呢?只需添加 `console.log('ON', obj) 作為 'findObjectByLabel' 函數的第一行。
您將看到您在“E”上循環。因為在某些時候,被測試的對象是一個字符串。
第二個問題:您檢查 .label === 'Hostnames'...json 數據中沒有 'label' 鍵。
修復此問題后的另一個問題是您將停在第一個主機名上。
這是一個解決方案
function deepFind(obj, label, results=[]) {
if( typeof obj !== 'object' && !!obj )
return null;
if( !!obj[label] ) {
results.push(obj[label]);
}
Object.getOwnPropertyNames(obj).forEach( k => {
deepFind(obj[k], label, results);
});
}
const results = [];
deepFind(data, 'Hostnames', results);

TA貢獻1842條經驗 獲得超13個贊
數據結構需要嵌套循環,但這是可行的。這將提供一個主機名數組:“我想遍歷對象并找出主機名的值”。
const data = {
"error1": {
"7": [{
"ErrorType": "Error-1A",
"Hostnames": "host123.com,hostabc.com,host33a.com..."
}],
"8": [{
"ErrorType": "Error-1B",
"Hostnames": "host223.com,host2c.com,host43a.com..."
},
{
"ErrorType": "Error-1C",
"Hostnames": "host1231.com,host2abc.com,host313a.com..."
}
]
},
"error2": {
"3": [{
"ErrorType": "Error-2A",
"Hostnames": "host1231.com,host2abc.com,host313a.com..."
},
{
"ErrorType": "Error-2B",
"Hostnames": "host1231.com,host2abc.com,host313a.com..."
}
],
"8": [{
"ErrorType": "Error-2C",
"Hostnames": "host1231.com,host2abc.com,host313a.com..."
},
{
"ErrorType": "Error-2D",
"Hostnames": "host1231.com,host2abc.com,host313a.com..."
}
]
},
"error3": {
"1": [{
"ErrorType": "Error-3A",
"Hostnames": "host1236.com"
},
{
"ErrorType": "Error-3B",
"Hostnames": "hostc3231.com"
}
]
}
};
const out = [];
for (let key in data) {
for (let number in data[key]) {
data[key][number].map(d => out.push(d.Hostnames));
}
}
console.log(out);
添加回答
舉報