Internet Explorer存在findIndex()方法问题

24

我正在使用Selenium::Remote::Driver模块测试不同浏览器。

我想检查是否在我的网站列表中发现某个项目,该列表来自JavaScript框架(创建网格)。对于这种情况,我必须使用Selenium::Remote::Driver允许的JavaScript代码片段。

我编写了以下代码:

$script = q{

      var paramProgramName = arguments[0];

      var list  = $('#c-list').dxList('instance');
      var items = list.option('items');
      var index = items.findIndex(function(el){ return el.name == paramProgramName; });

      list.selectItem(index);

      return ;
};

$driver->execute_script($script, $programName);

使用Chrome和Firefox没有问题,但在Internet Explorer中无法正常工作,因为findIndex方法仅受版本12及其以上版本支持。由于某种原因,我必须使用版本11。

有什么不同的方法可以从每个浏览器中获取索引?

4个回答

72
所以我的问题是,我应该如何做才能在每个浏览器中得到我的索引?
你至少有三个选项:
1.使用shim Array#findIndexMDN提供了一个shim/polyfill可供使用。
2.使用IE11具有的其他功能,例如Array#some(即使IE9也有):
var index = -1;
items.some(function(el, i) {
    if (el.name == paramProgramName) {
        index = i;
        return true;
    }
});
使用其他即使IE8也支持的内容,例如for:
var index = -1;
for (var i = 0; i < items.length; ++i) {
    if (items[i].name == paramProgramName) {
        index = i;
        break;
    }
}

2

您可以使用http://underscorejs.org/

如何使用:

var index = _.findIndex(objects, function(item){
return item.name == programName;
});

-2

另一种方式:

var objects = [
  { 'key' : 1, 'name' : 'ABC' },
  { 'key' : 2, 'name' : 'QLP' },
  { 'key' : 3, 'name' : 'XYZ' },
];

function filterByKey(obj) {
  if ('key' in obj) {
    return obj.key === 'some_value';
  }
}

var index = objects.indexOf(
  objects.filter(filterByKey)[0]
);

-2
更好的方式:
var findArrayIndex = function (array, predicateFunction) {
    var length = array == null ? 0 : array.length;
    if (!length) {
        return -1;
    }
    var index = -1;
    for (var i = 0; i < array.length; ++i) {
        if(predicateFunction(array[i])) {
            index = i;
            break;
        }
    }
    return index;
}

使用方法:

findArrayIndex(cachedAnnouncementsArray, function(o){return o.ID == 17;}); 

2
为什么这个函数比被认为是正确答案的那个函数更好?你能解释一下吗?我认为它过度设计,使用了predicateFunction,变得复杂了。 - Dimitris Damilos
我正在寻找一个能替代lodash的_.findIndex方法的解决方案。这个方法对我很有用。 - zingh
@DimitrisDamilos和他的点赞者们 - 这实际上是一个不错且有用的函数 - 这基本上是Array.prototype.findIndex在现代浏览器中支持的简化重写/填充 - 查看该参考文献,您将看到使用方式与此处完全相同。但是,与其他JavaScript内置函数保持一致,第二个参数应该真正被称为“回调”,而不是称为“predicateFunction”。 - jbyrd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接