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
Denis
Но редьюс медленнее как правило. Но не всегда
Dika
Dima
ух ебать колотить нахуя такое вообще придумывали через пень колоду
Dima
Denis
https://github.com/dg92/Performance-Analysis-JS
Dima
да ща померяем что там медленее что нет))
Denis
Dika
Denis
Dika
наоборот
Dika
на маленьких слегка медленнее, на 3000+ быстрее
Maksim
дык в чем прикол сравнивать конкретные реализации, надо сравнивать сложноть, у мапа и у редьюса сложность O(n)
Dika
ну сложность да, конечно
Maksim
все остальное реализации, оптимизации и прочее, важно в одном случае из миллиона
Denis
For loop всему голова
Denis
Чет я не понял, а JS Native это что?
Denis
while?
Maksim
это все сахар
Maksim
нативно это хвостовая рекурсия
Maksim
для нее только функция нужна
Dika
Denis
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
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');
так console.time('reduce') нужно ставить перед вызовом .reduce(…), жс же не ленивый язк
Dika
ну и на одной итерации это вряд ли что-то покажет
Maksim
перфоманс тесты в прочате
Dika
ага
Dika
один проход все равно должен быть, как минимум, не медленнее двух
Pavel
Вроде чувак из "ниндзя js" подробно рассказывал о этих вещах, или у гугл был видос не помню точно
Anonymous
Dima
Maksim
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);
Maksim
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
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);
benchMark правильно пишется
Dmitry
Да и в целом у тебя с неймингами пиздос какой-то
Dmitry
И это: 1000001 миллион, а не миллиард
Eugen
Гайз, нужен совет.
корректно ли так делать ?
const imageIndex = images.findIndex((item) => [${item.paragraph}] === dataSlide)
волнует именно этот участок [${item.paragraph}]
датаслайд приходит в виде строки
Dmitry
Отформатируй нормально плз
Dmitry
Почти:
const imageIndex = images.findIndex((item) =>
[${item.paragraph}] === dataSlide)
Dmitry
[${item.paragraph}] === dataSlide а зачем ты итем.параграф в массив пихаешь?
Syntax Highlight Bot
Dima
Serge
Dmitry
Понаберут фронтендеров, а они только до 10 считать умеют
Dima
Syntax Highlight Bot
Dmitry
Dima
))
Dima
уже 55 минут делает 1000 значений миллиард раз
Dmitry
Ты уверен, что значений тысяча, а итераций - миллиард?
Dima
да
Dmitriy
Ctrl+Shift+I
Girei
Привет, помогите пожалуйста, как вытянуть promiseValue ?
Girei
Girei
Maksim