数组含有效值但array.length返回0?附代码与数据示例
问题分析与解决方案
嘿,我一眼就瞅出你代码里的关键问题啦!
核心错误:数组元素访问方式不对
你在循环里直接写了 data.data.imgId 和 data.data.imgString,但 data.data 是一个数组啊!数组本身根本没有这两个属性——你得访问数组里的第 q 个元素,也就是 data.data[q],才能拿到对应对象里的 imgId 和 imgString。
原来的代码里,每次push的其实是 {imgId: undefined, imgString: undefined},虽说按道理数组长度应该和 data.data.length 一致,但你说返回0,大概率是这个错误引发了隐性问题,或者你是在异步场景下执行的这段代码(比如 data.data 还没被赋值就跑了循环)。先把最明显的代码问题修正:
修正后的代码
for (var q = 0; q < data.data.length; q++) { // 重点:先拿到数组里当前循环的元素 var currentImg = data.data[q]; var test1 = { imgId: currentImg.imgId, imgString: currentImg.imgString }; vm.imgArr.push(test1); } console.log(vm.imgArr.length); // 现在应该和data.data的长度一致啦
额外优化小建议
- 用
forEach循环更简洁,还能避免索引写错的问题:
data.data.forEach(item => { vm.imgArr.push({ imgId: item.imgId, imgString: item.imgString }); });
- 如果是Vue场景,记得提前把
vm.imgArr初始化为空数组(比如在Vue实例里声明imgArr: []),不然push操作会无效哦。
内容的提问来源于stack exchange,提问作者code.cycling
相关产品推荐
相关产品推荐

