即使项目存在于数组中,findIndex()也会返回-1

时间:2019-05-09 09:37:06

标签: javascript angular typescript

这是我正在使用的功能的一部分:

this.instructions是一个数组。

我故意添加了一些console.log()只是为了向您显示我在this.instructions数组中寻找的项目存在。

insertOrUpdateI(i, instruction_frame) {

    if (i.hasOwnProperty('src_id')) {
      let iToUpdateIndex = this.instructions.findIndex(known_i => known_i.src_id == i.src_id);
      console.log('i: ',i)
      console.log('this.instructions: ',this.instructions);
      console.log('iToUpdateIndex: ', iToUpdateIndex);
      if (iToUpdateIndex > -1) {
        let oldInstruction = this.instructions[iToUpdateIndex];
        this.instructions[iToUpdateIndex] = {...i, frame: oldInstruction.frame}; // don't update the frame
        this.reconstructMatchState({
          fetchFromBack: false,
          lastFrame: this.stream.lastCameraFrame,
          applyNow: true
        }).subscribe();
        return
      }
    }
....

这是我得到的结果:

  

i:{主题:“纸牌”,玩家ID:6554,纸牌类型:“ Yellow_card”,src_id:1,帧:5077}

     

this.instructions:[{subject:“ period”,name:“ period_1”,start:5031,frame:5031,src_id:-1},   {subject:“ card”,player_id:6547,card_type:“ yellow_card”,src_id:1,frame:5077}]

     

iToUpdateInde:-1

但是,我有i.src_id === 1,并且数组上有一个项目的src_id == 1

我想念什么?我会感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

为我here's a stackblitz example工作,请尝试再做一次。

答案 1 :(得分:0)

最后,我在这里找到了我的问题的答案: Is console.log async or sync 我的代码没有任何问题,问题可能出在我使用的开发人员工具的版本上。

根据我们使用的浏览器及其版本,console.log()似乎有不同的行为。有时它可能具有异步行为,即使我们没有在其中传递任何回调!