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

    0xD34F
    @0xD34F Куратор тега JavaScript
    if ( typeof arr[i] === 'number' ) {
     		x*= arr[i];

    А что если arr[i + 1] окажется строкой? Сначала надо проверить всё, а уже потом вычислять (если потребуется) объединённое значение:

    function bullshit(arr) {
      if (arr.every(n => typeof n === 'number')) {
        return arr.reduce((acc, n) => acc * n, 1);
      }
    
      if (arr.every(n => typeof n === 'string')) {
        return arr.join('');
      }
    
      return null;
    }
    
    
    bullshit([ 1, 2, 3 ]) // 6
    bullshit([ 'a', 'b', 'c' ]) // 'abc'
    bullshit([ 1, '!' ]) // 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.number: return arr.reduce((acc, n) => acc * n, 1);
        case count.string: return arr.join('');
        default: return null;
      }
    }
    Ответ написан
    1 комментарий