Dima
можно просто перебрать по условию num={ ev:[], odd:[] }; somnum = [1, 9, 10, 3, 5, 7]; somnum.forEach(item=>{ item%2==0?num.odd.push(item):num.ev.push(item); }); console.log(num);
Denis
.map().filter(Boolean) Будет быстрее reduce
Dika
.map().filter(Boolean) Будет быстрее reduce
так наоборот редьюс проходит один раз, а у тебя два прохода
Denis
Но редьюс медленнее как правило. Но не всегда
Dima
ух ебать колотить нахуя такое вообще придумывали через пень колоду
Maksim
Но редьюс медленнее как правило. Но не всегда
нет, редьюс не медленне, почему вдруг, мап это частный случай редьюса
Denis
https://github.com/dg92/Performance-Analysis-JS
Dima
да ща померяем что там медленее что нет))
Dika
https://github.com/dg92/Performance-Analysis-JS
здесь редьюс быстрее мапа
Denis
здесь редьюс быстрее мапа
На маленьких массивах
Dika
наоборот
Dika
на маленьких слегка медленнее, на 3000+ быстрее
Dika
нет, редьюс не медленне, почему вдруг, мап это частный случай редьюса
в теории частные случаи легче оптимизировать, чем генерализованные, но редьюс все равно вряд ли значительно медленнее
Maksim
дык в чем прикол сравнивать конкретные реализации, надо сравнивать сложноть, у мапа и у редьюса сложность O(n)
Dika
ну сложность да, конечно
Maksim
все остальное реализации, оптимизации и прочее, важно в одном случае из миллиона
Denis
For loop всему голова
Denis
Чет я не понял, а JS Native это что?
Denis
while?
Maksim
это все сахар
Maksim
нативно это хвостовая рекурсия
Maksim
для нее только функция нужна
Dika
Чет я не понял, а JS Native это что?
методы массива из stdlib
Dima
let num={ ev:[], odd:[] }; let somnum = [1, 9, 10, 3, 5, 7]; console.time('forEach'); somnum.forEach(item=>{ item%2==0?num.odd.push(item):num.ev.push(item); }); console.timeEnd('forEach'); const output = somnum.reduce((acc, el) => { el % 2 === 0?acc.odd.push(el):acc.ev.push(el); return acc; }, { ev: [], odd: [] }); console.time('reduce'); output; console.timeEnd('reduce');
Dima
forEach: 0.134ms reduce: 0.006ms
Dika
ну и на одной итерации это вряд ли что-то покажет
Maksim
перфоманс тесты в прочате
Dika
ага
Pavel
так наоборот редьюс проходит один раз, а у тебя два прохода
оптимизировано будет то - что чаще используется. Движок оптимизирует методы и обращение к нам если это происходит часто.
Dika
один проход все равно должен быть, как минимум, не медленнее двух
Pavel
Вроде чувак из "ниндзя js" подробно рассказывал о этих вещах, или у гугл был видос не помню точно
Dima
let num={ ev:[], odd:[] }; let somnum = [1, 9, 10, 3, 5, 7]; const output1 = somnum.forEach(item=>{ item%2==0?num.odd.push(item):num.ev.push(item); }); const output = somnum.reduce((acc, el) => { el % 2 === 0 ? acc.odd.push(el) : acc.ev.push(el); return acc; }, {ev: [], odd: []}); function benchMarck(f){ let date = Date.now(); // let date = performance.now(); f; return Date.now()-date; // return performance.now()-date; } let i=0; let FOREACHE=''; let REDUCE=''; while (i<1001){ FOREACHE+=benchMarck(output1); REDUCE+=benchMarck(output); i++; } console.log('FOREACHE',FOREACHE); console.log('REDUCE',REDUCE);
Anonymous
Так, отправьте его в noob.js. Больно смотреть на все это
Dima
короче вот)
Dima
function benchMarck(f){ let date = Date.now(); f(); return Date.now()-date; } let somnum = [1, 9, 10, 3, 5, 7]; const eache =()=> { somnum.forEach(item => { let num = { ev: [], odd: [] }; item % 2 == 0 ? num.odd.push(item) : num.ev.push(item); }); }; const reduc = ()=> { somnum.reduce((acc, el) => { el % 2 === 0 ? acc.odd.push(el) : acc.ev.push(el); return acc; }, {ev: [], odd: []}); }; var i=0; var FOREACHE=0; var REDUCE=0; while (i<1000001){ FOREACHE+=benchMarck(eache); REDUCE+=benchMarck(reduc); i++; } console.log('FOREACHE',FOREACHE); console.log('REDUCE',REDUCE);
Dima
FOREACHE 599 REDUCE 397
Dima
редюс быстрее
Maksim
На 6 элементах?
Dima
даже на 1 миллиарде итераций редюс в 1,873073414 быстрее
Dika
тут forEach в каждой своей итерации создает новые массивы (в отличии от редьюса), так не должно быть
Dika
да и результат этих функций не используется, так что движок может это просто выкинуть
Maksim
Есть как бы разница потестить функцию 1 раз на 1000 элементах и 1000 раз на одном
Dima
тестим 1 миллиард раз на 1000 элементах
Dmitry
Да и в целом у тебя с неймингами пиздос какой-то
Dmitry
И это: 1000001 миллион, а не миллиард
Eugen
Гайз, нужен совет. корректно ли так делать ? const imageIndex = images.findIndex((item) => [${item.paragraph}] === dataSlide) волнует именно этот участок [${item.paragraph}] датаслайд приходит в виде строки
Dmitry
Отформатируй нормально плз
Eugen
Отформатируй нормально плз
Сорри, const imageIndex = images.findIndex( (item) => `[${item.paragraph}]` === dataSlide)
Dmitry
Почти: const imageIndex = images.findIndex((item) => [${item.paragraph}] === dataSlide)
Eugen
Почти: const imageIndex = images.findIndex((item) => [${item.paragraph}] === dataSlide)
нет, это именно строка должна быть ) тоесть у меня датаслайд приходит в таком виде "[2]" а item.paragraph просто как число 2. и я сделл типо строкой это
Dmitry
[${item.paragraph}] === dataSlide а зачем ты итем.параграф в массив пихаешь?
Eugen
[${item.paragraph}] === dataSlide а зачем ты итем.параграф в массив пихаешь?
нет это просто текст ) это не массив. Эти кавычки просто обычная строка "[ 2]"
Pavel
нет это просто текст ) это не массив. Эти кавычки просто обычная строка "[ 2]"
выглядит как порно, может в какой-то момент dataSlide привести к виду типа const slide = Number(dataSlide.replace(/]|\[| /g, '')); item.paragraph === slide
Syntax Highlight Bot
Dmitry
Понаберут фронтендеров, а они только до 10 считать умеют
Dima
Почти: const imageIndex = images.findIndex((item) => [${item.paragraph}] === dataSlide)
const imageIndex = images.findIndex(item => [`${item.paragraph}`] === dataSlide)
Syntax Highlight Bot
Maksim
100000001 - миллиард?
Мля, ну вроде не пхп чат же
Dima
))
Dima
уже 55 минут делает 1000 значений миллиард раз
Dmitry
Ты уверен, что значений тысяча, а итераций - миллиард?
Dima
да
Dmitriy
Ctrl+Shift+I
Girei
Привет, помогите пожалуйста, как вытянуть promiseValue ?
Girei
Girei