Сообщение от Pavel M.
|
действительно
попробовал скорость filter и обычного цикла на большом массиве
в Хроме, FF, IE11
у меня цикл быстрее в разы (см. в console)
спасибо Aetae - не знал
|
Потому что методика тестирования хромает. filter обходит весь массив, for — нет. Можно попробовать так:
var i,
maxItems = 1e6,
arr = [],
needKey = 500137, // где-то в середине
myArr;
// генерим массив
for (i = 0; i < maxItems; i += 1) {
arr.push({key: i, label: i + ''});
}
// test filter
console.time('some');
myArr = [];
arr.some(function (item) {
if (item.key === needKey) {
myArr = [item];
return true;
}
return false;
});
console.timeEnd('some');
alert(JSON.stringify(myArr));
// test цикл
myArr = [];
console.time('for');
for (i = 0; i < arr.length; i += 1) {
if (arr[i].key === needKey) {
myArr.push(arr[i]);
break;
}
}
console.timeEnd('for');
alert(JSON.stringify(myArr));
some у меня отрабатывает в полтора раза быстрее filter, но все еще в два раза медленнее, чем for:
Цитата:
|
some: 23.802ms VM1460:24
for: 14.023ms VM1460:41
|