2 回答

TA貢獻(xiàn)1807條經(jīng)驗(yàn) 獲得超9個(gè)贊
因此,讓我們刪除無(wú)用的上下文。您想要深入查找對(duì)象中的“主機(jī)名”值。
并且您的遞歸似乎循環(huán),導(dǎo)致超出最大調(diào)用堆棧大小錯(cuò)誤。
怎么才能自己發(fā)現(xiàn)問(wèn)題呢?只需添加 `console.log('ON', obj) 作為 'findObjectByLabel' 函數(shù)的第一行。
您將看到您在“E”上循環(huán)。因?yàn)樵谀承r(shí)候,被測(cè)試的對(duì)象是一個(gè)字符串。
第二個(gè)問(wèn)題:您檢查 .label === 'Hostnames'...json 數(shù)據(jù)中沒(méi)有 'label' 鍵。
修復(fù)此問(wèn)題后的另一個(gè)問(wèn)題是您將停在第一個(gè)主機(jī)名上。
這是一個(gè)解決方案
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貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超13個(gè)贊
數(shù)據(jù)結(jié)構(gòu)需要嵌套循環(huán),但這是可行的。這將提供一個(gè)主機(jī)名數(shù)組:“我想遍歷對(duì)象并找出主機(jī)名的值”。
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);
添加回答
舉報(bào)