Internet Explorer 的 findIndex() 方法问题
findIndex() method issue with internet explorer
我正在使用 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。
我可以做些什么来从每个浏览器获取索引?
So my question is how can i do differently to get my index for every browser ?
您至少有三个选择:
垫片Array#findIndex
; MDN 有一个 shim/polyfill 你可以使用。
使用 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;
}
}
更好的方法:
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;});
另一种方式:
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]
);
您可以使用 http://underscorejs.org/、
使用方法:
var index = _.findIndex(objects, function(item){
return item.name == programName;
});
我正在使用 Selenium::Remote::Driver
模块对不同的浏览器进行一些测试。
我想检查是否在我的网站列表中找到某个项目,该列表来自框架 JavaScript(创建网格)。对于这种情况,我必须使用 Selenium::Remote::Driver
.
我写了下面的代码
$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。
我可以做些什么来从每个浏览器获取索引?
So my question is how can i do differently to get my index for every browser ?
您至少有三个选择:
垫片
Array#findIndex
; MDN 有一个 shim/polyfill 你可以使用。使用 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; } }
更好的方法:
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;});
另一种方式:
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]
);
您可以使用 http://underscorejs.org/、
使用方法:
var index = _.findIndex(objects, function(item){
return item.name == programName;
});