(Promise/async): “TypeError: Cannot read property ‘length‘ of undefined“

本文详细解析了在递归遍历树形对象数组时遇到的TypeError: Cannot read property 'length' of undefined错误。通过检查代码中对children属性的访问,确保在调用length属性前进行存在性判断,有效避免了该类型错误,实现了递归调用的正确执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

错误描述

我在使用递归遍历一个树形对象数组时,编译器报如下错误:
在这里插入图片描述
这个错误翻译过来是不能读取元素未定义的length属性
由此可知,这个错误通常出现在你要使用某个元素的length属性,而这个元素不存在(即未定义)

解决方法

根据编译器报的错,回过去看自己的代码块:
在这里插入图片描述
发现自己在使用递归函数时没有判断结点的children属性是否存在,由于存在叶子结点,叶子结点没有children属性。所以我对代码进行了修改,在调用length属性前,先判断结点的children属性是否存在
在这里插入图片描述
这样就解决了(Promise/async): "TypeError: Cannot read property ‘length’ of undefined"错误,并且递归调用能够达到其目的。

module.exports = function (plugin) { const runtime = plugin.runtime let javaOcr = plugin.createOcr() var $mlKitOcr = function () { } $mlKitOcr.recognizeText = function (img, options) { options = options || {} let region = options.region if (region) { let r = buildRegion(region, img) img = images.clip(img, r.x, r.y, r.width, r.height) } let text = javaOcr.recognizeText(img.getBitmap()) if (text) { text = JSON.parse(JSON.stringify(text)) } if (region) { img.recycle() } return text } $mlKitOcr.detect = function (img, options) { options = options || {} let region = options.region if (region) { let r = buildRegion(region, img) img = images.clip(img, r.x, r.y, r.width, r.height) } let resultList = runtime.bridges.bridges.toArray(javaOcr.detect(img.getBitmap())) if (region && region.length > 1 && resultList && resultList.length > 0) { resultList.forEach(r => { r.bounds.offset(region[0], region[1]) if (r.elements && r.elements.length > 0) { r.elements.forEach(e => e.bounds.offset(region[0], region[1])) } }) } if (region) { img.recycle() } return resultList } return $mlKitOcr; function buildRegion (region, img) { if (region == undefined) { region = []; } var x = region[0] === undefined ? 0 : region[0]; var y = region[1] === undefined ? 0 : region[1]; var width = region[2] === undefined ? img.getWidth() - x : region[2]; var height = region[3] === undefined ? (img.getHeight() - y) : region[3]; var r = new org.opencv.core.Rect(x, y, width, height); if (x < 0 || y < 0 || x + width > img.width || y + height > img.height) { throw new Error("out of region: region = [" + [x, y, width, height] + "], image.size = [" + [img.width, img.height] + "]"); } return r; } }上面这个报错 [TypeError: Cannot read property "bridges" from undefined]
03-19
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值