【问题标题】:findIndex is not a functionfindIndex 不是函数
【发布时间】:2021-01-30 22:25:54
【问题描述】:

首先,我知道这个问题已经被问过多次,但我的回答没有任何解决方案。我已经搜索并尝试了各种不同的方法,例如将其设为对象、使用过滤器等,但似乎没有任何效果。

我之前(大约 6 个月前)使用过这段代码,然后它就可以工作了。

代码:

editByIdSuccess: (state, draggedEvent) => {
    let index = state.events.findIndex(event => event.id === draggedEvent.id);
    if(index !== -1){
        state.events.splice(index, 1, draggedEvent);
    }
},

返回“Uncaught (in promise) TypeError: state.events.findIndex is not a function”。我也尝试过创建一个函数并尝试使用 Object.Assign。

状态是一个数组,定义如下:

const state = {
    events: []
};

感谢您的解释,这样我就可以理解为什么我不能再做这样的代码了。

【问题讨论】:

  • @Andreas,谢谢,我发帖后看到了。我现在改了。
  • 在尝试使用之前检查state.events的类型。也许它在某个地方被覆盖了。
  • @Teemu,我想你就在这里。似乎状态在某个地方发生了变化,但我无法弄清楚在哪里。感谢您的提醒!
  • @Teemu,你完全正确!非常感谢您的快速解决方案。

标签: javascript vue.js vuex


【解决方案1】:

正如@Teemu 所说,状态会更改为之前某处的对象。

在尝试使用之前检查 state.events 的类型。也许是 在某处被覆盖。 ——提姆

【讨论】:

    【解决方案2】:

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some

    根据 MDN 上的文档,Array.prototype.some 返回一个布尔值。

    你可以改成:

     let isEventPresent = state.events.some(event => event.id === draggedEvent.id);
        if(isEventPresent){
            state.events.splice(index, 1, draggedEvent);
        }
    

    【讨论】:

    • 感谢您的帮助,但是,我已经阅读了文档并且使用一些仍然返回与 findIndex 相同的错误。它可能是在某个地方将状态更改为对象而不是数组,但说实话我不知道。
    • 你可以使用isArray来判断状态是对象还是数组。如果是对象,您可以将其转换为数组 javascripttutorial.net/object/…
    猜你喜欢
    • 2018-12-18
    • 1970-01-01
    • 1970-01-01
    • 2021-05-22
    • 2021-06-04
    • 1970-01-01
    • 2011-12-22
    • 2015-11-03
    • 1970-01-01
    相关资源
    最近更新 更多