亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

for...in 循環遍歷對象數組返回“無法讀取未定義的屬性”

for...in 循環遍歷對象數組返回“無法讀取未定義的屬性”

米琪卡哇伊 2021-06-30 06:08:57
我需要遞歸地瀏覽對象樹,直到找到匹配的元素并將一些數據推送到其中。這是我的結構的簡化示例:post.comments = [    {        _id: a,        content: 'Foo',        replies: [            {                _id: aa,                content: 'Foobar',                replies: [                    {                        _id: aaa,                        content: 'Foobarbaz',                        replies: [...]                    }                ]            },            {                _id: ab,                content: 'Barfoo',                replies: [...]            }        ]    },    {        _id: b,        content: 'Bar',        replies: [...]    },    {        _id: c,        content: 'Bar',        replies: [...]    },    ...]理論上,回復可以無限嵌套。這是我的遞歸函數:function findNode(comments, id, data) {    for (let key in comments) {        currentNode = comments[key]        if (currentNode._id.equals(id)) {            currentNode.replies.push(data)            break;        } else {            if (currentNode.replies.length) {                findNode(currentNode.replies, id, data)            }            else {                continue;            }        }    }}findNode(post.comments, id, comment)這個函數似乎只讀取第一個注釋對象的子節點,然后當它到達一個沒有子節點的節點時以“無法讀取未定義的屬性“等于”退出(但我認為continue;應該將它從那個樹?)我不知道 for 循環和遞歸是什么?編輯:對不起!string.equals(id)來自 Mongoose - 它相當于string == id這個示例數組的用途。
查看完整描述

1 回答

?
慕工程0101907

TA貢獻1887條經驗 獲得超5個贊

currentNode.replies.length如果currentNode.replies未定義,則不能使用。你應該檢查是否currentNode.replies不是null,會有點像這樣:

if (currentNode.replies && currentNode.replies.length) { ...

編輯:同樣適用于currentNode._id,null在調用之前檢查它是否不是currentNode._id.equals。



查看完整回答
反對 回復 2021-07-01
  • 1 回答
  • 0 關注
  • 346 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號