Задать вопрос
  • Как выполнять различные действия в зависимости от содержимого массива?

    0xD34F
    @0xD34F Куратор тега JavaScript
    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;
      }
    }
    Ответ написан
    1 комментарий