我只是在練習一些原生 Javascript 并遇到了這個問題。我正在構建一個評論小部件并嘗試實作一個“回復”按鈕。為此,我必須遍歷一些嵌套的評論以找到正確的評論并將回復推送到它的“回應”屬性。到目前為止,這是我的代碼:
const recursiveSearch = (object, target) => {
if(object.id === target) return object;
let result;
if(object.responses.length > 0) {
object.responses.forEach(response => {
if(response.id === target) {
result = response;
console.log('match found')
console.log(response)
return response
}
else if(response.responses.length > 0) recursiveSearch(response, target)
})
};
console.log('result Is')
console.log(result)
return result
}
日志顯示預期的行為很好,但在查看結束時回傳陳述句是未定義的。有什么辦法可以解決這個問題?
uj5u.com熱心網友回復:
您應該從遞回呼叫回傳并result再次分配給變數。
const recursiveSearch = (object, target) => {
if (object.id === target) return object;
let result;
if (object.responses.length > 0) {
object.responses.forEach(response => {
if (response.id === target) {
result = response;
console.log('match found')
console.log(response)
return response
}
else if (response.responses.length > 0) {
result = recursiveSearch(response, target) // <--------------------
}
})
};
console.log('result Is')
console.log(result)
return result
}
您也可以使用 afind代替forEach。這樣效率更高。
const recursiveSearch = (object, target) => {
if (object.id === target) return object;
const result = object.responses.find(response => {
if (response.id === target) {
console.log('match found')
console.log(response)
return response
}
else if (response.responses.length > 0) {
return recursiveSearch(response, target)
}
})
console.log('result Is')
console.log(result)
return result
}
uj5u.com熱心網友回復:
您忘記在 else if 中回傳,但請注意,您在 forEach 中,因此可以將其更改為常規 for 或使用其他內容
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/373321.html
標籤:javascript 递归
