为什么Internet Explorer 11对象不支持属性或方法'findIndex'

时间:2017-07-06 19:00:36

标签: javascript arrays internet-explorer javascript-objects

我有一个对象数组,我需要从中找到一个特定的索引,然后从数组中删除相应的对象。

我使用了findIndex()方法:

var index = data.findIndex(x => x.OBJECTID == objectID);
data.splice(index, 1);

这在Chrome中运行良好,但在IE 11中,它会抛出

  

object不支持属性或方法'findIndex'

我通过使用此stackoverflow回答中的解决方案解决了这个问题:findIndex() method issue with internet explorer

在检查控制台日志时,我注意到Chrome和IE 11中的对象数组之间存在差异:

在IE 11中,控制台日志,对象数组是: enter image description here

在Chrome中,它是: enter image description here

请注意,Chrome中的对象属于object类型,但在IE中,它们的类型为[object object]。这就是findIndex()方法失败的原因吗?如果是这样,为什么类型不同,如果不是,为什么findIndex()在IE 11中失败?

2 个答案:

答案 0 :(得分:1)

我相信你的问题不仅仅是findIndex,还有I.E.不支持lambda函数。

对于IE支持,使用for循环是不可避免的。或者您可以使用lodash版本的findIndex

var users = [
    { 'user': 'barney',  'active': false },
    { 'user': 'fred',    'active': false },
    { 'user': 'pebbles', 'active': true }
 ];

_.findIndex(users, function(o) { return o.user == 'barney'; });

答案 1 :(得分:0)

如果对项目使用编译,则可以考虑安装polyfill软件包

npm i --save core-js

yarn add core-js

然后添加到项目入口点的顶部

import 'core-js'

目前core-js polyfill library是提供跨浏览器支持的最简单方法