Проблема с методом findIndex() с Internet Explorer
Я делаю некоторые тесты с различными браузерами, используя модуль Selenium::Remote::Driver
.
Я хотел бы проверить, нахожу ли я какой-либо элемент в моем списке веб-сайтов, список из фреймворка JavaScript (который создает сетки). Для этого случая я должен использовать фрагмент 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.
Что я могу сделать по-разному, чтобы получить индекс из каждого браузера?
Ответы
Ответ 1
Итак, мой вопрос: как я могу сделать по-разному, чтобы получить свой индекс для каждого браузера?
У вас есть как минимум три варианта:
-
Shim Array#findIndex
; У MDN есть прокладка/полифилл, которую вы можете использовать.
-
Используйте что-то еще, что есть в 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;
});
Ответ 3
Вместо:
const index = items.findIndex(el => el.name == paramProgramName);
Вы можете достичь того же результата в двух операциях IE9, например, так:
const index = items.indexOf(
items.filter(el => el.name == paramProgramName)[0]
);
Ответ 4
По-другому:
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]
);
Ответ 5
Лучший способ:
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;});