Javascript 访问比for循环中的当前索引小或大一个索引的数组元素时遇到问题(即使它存在)

Javascript 访问比for循环中的当前索引小或大一个索引的数组元素时遇到问题(即使它存在),javascript,arrays,Javascript,Arrays,My object idAry是一个元素数组,其属性名为msisdn\u id。数组中有4个对象,当我循环遍历它们时,Id设置为与循环中的第二个Id相同,它会正确地找到它,并落在else子句中。但是,当我尝试访问数组中处于+1或-1位置的元素的id时,我得到一个错误[Vue warn]:v-on处理程序中的错误:“TypeError:无法读取未定义的属性'msisdn_id'”我不知道为什么它没有定义。我真的是被“左”字圈住了 我有这样的代码: for (let [index, val] o

My object idAry是一个元素数组,其属性名为
msisdn\u id
。数组中有4个对象,当我循环遍历它们时,Id设置为与循环中的第二个Id相同,它会正确地找到它,并落在else子句中。但是,当我尝试访问数组中处于+1或-1位置的元素的id时,我得到一个错误
[Vue warn]:v-on处理程序中的错误:“TypeError:无法读取未定义的属性'msisdn_id'”
我不知道为什么它没有定义。我真的是被“左”字圈住了

我有这样的代码:

  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
:而问题是
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;
    }
  }

val
idAry
val[index]混淆。msisdn\u id
不存在使用
val.msisdn\u id

for (let [index, val] of idAry.entries())
  {
  console.log("index is:" + index);
  console.log("val.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: " + val[index - 1].msisdn_id + "," + val[index + 1].msisdn_id);
      this.leftId = idAry[index - 1].msisdn_id;
      this.rightId = idAry[index + 1].msisdn_id;
      }
    break;
    }
  }
但是要做的事情要简单得多

let index=idAry.findIndex(e=>e.msisdn\u id==id)
if(index!=-1)//如果存在
{
log('id find,index is',index,idAry[index].msisdn_id);
如果(索引>0)
{this.leftId=idAry[index-1].msisdn_id;}
如果(索引<(数据长度-1))
{this.rightId=idAry[index+1].msisdn_id;}
}
其他的
{
log('id未找到(',id');
}

您的更新是我的第一个答案。请给我们举一个idAry表的部分示例,这样会更清楚!又来了@Jojojo先生,我不是24/7工作的……谢谢你之前的回答,我确实解释错了。
let index = idAry.findIndex(e=>e.msisdn_id===id)

if (index!=-1)  // if exist
  {
  console.log('id found , index is', index, idAry[index].msisdn_id);

  if ( index > 0 )
    { this.leftId  = idAry[index - 1].msisdn_id;}

  if (index < (idAry.length - 1))
    { this.rightId = idAry[index + 1].msisdn_id; }
  }
else
  {
  console.log('id not found (', id , ')' );
  }