if ( typeof arr[i] === 'number' ) {
x*= arr[i];
А что если
arr[i + 1]
окажется строкой? Сначала надо проверить всё, а уже потом вычислять (если потребуется) объединённое значение.
Вариант раз - перебираем массив отдельно для каждого из проверяемых типов данных:
function bullshit(arr) {
if (arr.length) {
if (arr.every(n => n === `${n}`)) {
return ''.concat(...arr);
}
if (arr.every(n => n === +n)) {
return eval(arr.join('*'));
}
}
return null;
}
Вариант два - считаем, сколько значений каких типов есть в массиве:
function bullshit(arr) {
const count = arr.reduce((acc, n) => {
const type = typeof n;
acc[type] = (acc[type] || 0) + 1;
return acc;
}, {});
switch (arr.length) {
case count.string: return arr.join('');
case count.number: return arr.reduce((acc, n) => acc * n, 1);
default: return null;
}
}