Javascript findIndex不是一个函数

Gig*_*igi 6 javascript

我有一个json数组:

[    
  {"id":19,"name":"Jed", "lastname":"DIAZ", "hobby":"photo", "birthday":"2011/11/22"},
  {"id":20,"name":"Judith", "lastname":"HENDERSON", "hobby":"pets", "birthday":"1974/06/12"},
  {"id":21,"name":"Nicolai", "lastname":"GRAHAM", "hobby":"reading", "birthday":"2005/01/22"},
  {"id":22,"name":"Vasile", "lastname":"BRYANT", "hobby":"singing", "birthday":"1987/03/17"}
]
Run Code Online (Sandbox Code Playgroud)

用于从json数组中删除项目的函数

 removeItem: function(removeId){
   //paramater validation
   return dataLoad.then(function(data){

     f = data.findIndex(function(item) { return item.id == removeId; });

     if(f < 0)
       return false;
     data.splice(f,1);

     LS.setData(data,"cutomers");

     return true;
   });
 }
Run Code Online (Sandbox Code Playgroud)

代码运行时出现错误:

findIndex不是一个函数

错误行

 f = data.findIndex(function(item) { return item.id == removeId; });
Run Code Online (Sandbox Code Playgroud)

axe*_*uch 14

findIndex不是的原型方法Array的EcmaScript 262,你可能需要filter联合indexOf,相反,它具有停止尽快搜索的优势,找到条目

var f;
var filteredElements = data.filter(function(item, index) { f = index; return item.id == removeId; });


if (!filteredElements.length) {
    return false;
}

data.splice(f, 1);
Run Code Online (Sandbox Code Playgroud)

编辑按照Nina Scholz的评论建议:

该解决方案是使用Array.prototype.some替代

var f;
var found = data.some(function(item, index) { f = index; return item.id == removeId; });

if (!found) {
    return false;
}

data.splice(f, 1);
Run Code Online (Sandbox Code Playgroud)

Array.prototype.findIndex MDN中找到

在此输入图像描述


Osk*_*son 5

我想你会在自己的标题中找到答案;您可能正在寻找 indexOf,而不是 findIndex。findIndex 是 ECMAScript2015 的一部分,尚未得到广泛支持。

根据MDN, findIndex 仅在 Firefox 25+ 和 Safari 7.1+ 中受支持,因此如果您在任何其他浏览器中进行测试,您会遇到您遇到的错误。

如果您今天想使用 findIndex,则可以在 MDN 页面上使用建议的 polyfill。