javascript - 无法访问比 for 循环中的当前索引少或大一个索引的数组元素(即使它存在)
问题描述
我的对象 idAry 是一个元素数组,具有一个名为msisdn_id
. 数组中有 4 个对象,当我遍历它们并且 Id 设置为与循环中的第二个 ID 相同时,它正确地找到它并落入 else 子句。但是,当我尝试访问数组中位置 +1 或 -1 的元素的 id 时,我得到一个错误,[Vue warn]: Error in v-on handler: "TypeError: Cannot read property 'msisdn_id' of undefined"
我不知道为什么它没有被定义。我从字面上循环通过“左”一个。
我有这样的代码:
for (let [index, val] of idAry.entries()) {
console.log("index is:" + index);
console.log("val[index].msisdn_id:" + val[index].msisdn_id);
if(id == val[index].msisdn_id){
console.log("id found:" + val[index].msisdn_id);
if( index == 0 ){
//no left button
console.log("index == 0: " + val[index + 1].msisdn_id);
this.rightId = val[index + 1].msisdn_id;
}
else if (index == (val.length - 1)) {
//no right button
console.log("else if: " + val[index - 1].msisdn_id);
this.leftId = val[index - 1].msisdn_id;
}
else {
console.log("both LR: " + val[index - 1].msisdn_id + "," + val[index + 1].msisdn_id);
this.leftId = val[index - 1].msisdn_id;
this.rightId = val[index + 1].msisdn_id;
}
break;
}
}
输出看起来像:
length of ary is:4
TerminalProfileReport.vue?3387:400 index is:0
TerminalProfileReport.vue?3387:401 val[index].msisdn_id:111
TerminalProfileReport.vue?3387:400 index is:1
TerminalProfileReport.vue?3387:401 val[index].msisdn_id:222
TerminalProfileReport.vue?3387:403 id found:222
编辑 - 更新了输出。它应该显示val[index]
和更新的代码看起来像这样
for (let [index, val] of idAry.entries()) {
console.log("index is:" + index);
console.log("idAry[index].msisdn_id:" + val.msisdn_id);
if(id == val.msisdn_id){
console.log("id found:" + val.msisdn_id);
if( index == 0 ){
//no left button
console.log("index == 0: " + idAry[index + 1].msisdn_id);
this.rightId = idAry[index + 1].msisdn_id;
}
else if (index == (idAry.length - 1)) {
//no right button
console.log("else if: " + idAry[index - 1].msisdn_id);
this.leftId = idAry[index - 1].msisdn_id;
}
else {
console.log("both LR: " + idAry[index - 1].msisdn_id + "," + idAry[index + 1].msisdn_id);
this.leftId = idAry[index - 1].msisdn_id;
this.rightId = idAry[index + 1].msisdn_id;
}
break;
}
}
解决方案
我不确定您发布的代码是否与您使用的代码相同,因为您提到的日志之一以: idAry[index].msisdn_id
: while it's in question开头val[index].msisdn_id:
。无论如何,基于问题中提到的代码,问题似乎在于如何使用变量val
,因为它是数组本身。在每次迭代val
中代表数组中一个条目的值idAry
。在这里你的代码更新:
for (let [index, val] of idAry.entries()) {
console.log("index is:" + index);
console.log("idAry[index].msisdn_id:" + val.msisdn_id);
if(id == val.msisdn_id){
console.log("id found:" + val.msisdn_id);
if( index == 0 ){
//no left button
console.log("index == 0: " + idAry[index + 1].msisdn_id);
this.rightId = idAry[index + 1].msisdn_id;
}
else if (index == (idAry.length - 1)) {
//no right button
console.log("else if: " + idAry[index - 1].msisdn_id);
this.leftId = idAry[index - 1].msisdn_id;
}
else {
console.log("both LR: " + idAry[index - 1].msisdn_id + "," + idAry[index + 1].msisdn_id);
this.leftId = val[index - 1].msisdn_id;
this.rightId = val[index + 1].msisdn_id;
}
break;
}
}
推荐阅读
- git - 如何禁用有关 git 初始分支名称的 git 消息
- python - 我们如何在 Folium 中显示工具提示和弹出窗口
- sql - 如何加快使用 SELECT 中的子查询来计算值的查询?
- vue.js - Vue 与 Axios 下拉预填充
- vue.js - Vue - 我如何更新输入文本字段的默认值?
- python - 总结 collections.Counter 对象在 pandas 中使用`groupby`
- html - html中的img标签哪一个是对的?
- javascript - 上传文件到服务器时不显示结果
- python - 向 pandas df 中的特定行和列添加值
- html - CSS为圆形图像添加不透明颜色叠加