Я могу делать двойную порцию уменьши в Javascript?

У меня есть договоренность договоренностей (с элементами booleanos), давайте говорить,

const array = [[false, false], [false, true], [true, true]];

И я хочу использовать один reduce() чтобы считать все true есть, это - то, что я пробую:

const check = (array) => {
    const numNotAnsweredQuestion = array.reduce((acc, elem1) => {
      return (
        acc +
        elem1.reduce((acc2, elem2) => {
          return elem2 ? acc2 + 1 : acc2;
        }, 0)
      );
    }, 0);
    return numNotAnsweredQuestion;
  };

А именно, я накапливаю вдвойне: или нет?

Браузер возвращает мне функцию:

introducir la descripción de la imagen aquí

1
задан 23.12.2019, 03:51
4 ответа

Ты funciГіn функционируй. Он дает мне идею, которой sГіlo тебе не хватает призывать ее. Но ... - плохая одна prГЎctica делать shadowing variables/parГЎmetros. Лучше использовать, внутри нее funciГіn, переменные, которые не назывались бы, равно как те же, что и снаружи.

, Сказанные это, approach:

const array_original = [
  [false, false],
  [false, true],
  [true, true]
];

const check = (array_cualquiera) => {
  const numNotAnsweredQuestion = array_cualquiera.reduce((acc, elem1) => {
    return (
      acc +
      elem1.reduce((acc2, elem2) => {
        return elem2 ? acc2 + 1 : acc2;
      }, 0)
    );
  }, 0);
  return numNotAnsweredQuestion;
};

// Imprime 3
console.log(check(array_original));

EstГЎ совершенный. Однако estГЎs действуя на array, который ты знаешь, и ты implementaciГіn это - одно soluciГіn частное лицо.

, Если бы у тебя взамен был array, из которого sГіlo тебе известно, что у него есть элементы в уровнях anidaciГіn глубины N, и ты захотел бы рассказать, что

  • всех тех truthy (strings не vacГ - вы, true, nГєmeros отличные от нуля, объекты) или
  • всех тех falsy (strings vacГ - вы, null, undefined, 0, false, NaN)

ты Можешь использовать возврат, чтобы повторно призывать ее funciГіn countTruthy прежде всего укрытый элемент, который был бы array, и mapear truthy в 1 и falsy в 0 в противоположном случае:

const countTruthy = (array_cualquiera) => {
  return array_cualquiera.reduce((acc, elem1) => {
      return acc + 
      ((Array.isArray(elem1) && countTruthy(elem1))  // recursión
      || (elem1 ? 1 : 0)); //mapeo
      
   }, 0);
};

const array_original = [
  [false, false],
  [false, true],
  [true, true]
];
// Sigue siendo 3
console.log(countTruthy(array_original));

const array_muy_anidado = [
  [true, 1, 0],
  [undefined, false, NaN, window, Infinity],
  [
    [null, true], ''
  ],
  ['yes', [-1, 0, [{}, new Map(), function() {}]]]
];

// Imprime 10
console.log(countTruthy(array_muy_anidado));

Восток планирование функционирует на твоем array примера и в общем на любом array, элементы которого ты смог coercionar в booleano

2
ответ дан 23.12.2019, 22:06
  • 1
    Интересный... Спасибо за рекомендации. – Parzival 23.12.2019, 15:26

Мне кажется, что нужно считать следующее:

  • у Тебя Есть массив данных (эта деталь важна, так как сначала ты должен соглашаться на сдержанную стоимость)
  • , Сначала ты должен повторять по крайней мере 2 раза, чтобы получать стоимость каждого вектора, содержавшего в массиве
  • , Когда ты получишь стоимость каждого вектора массива, тогда можешь добавлять их к вектору vacГ - или (шаг)
  • Как только у тебя есть новый вектор со всей стоимостью, извлеченной из массива, тогда можешь применять mГ©todo reduce
  • я не вижу, из-за которого использовать 2 reduce, так как intenciГіn этого состоит в том, чтобы сводить ее к элементу вектор больше не массива , ввиду этого мне не кажется правильной манерой хотеть осуществить

CГіdigo примера

    const array = [[false, false], [false, true], [true, true]]
    let nuevoArray = []
    
    for (elemento of array) {
      for(valor of elemento) {
        nuevoArray.push(valor)
      }
    }
    
    let sumaEnteros = nuevoArray.reduce((previo, actual) => previo + actual)
    console.log(sumaEnteros)
1
ответ дан 23.12.2019, 22:06

Хотя его перемещает ее funciГіn, что подтвердил, если стоимость состоит true и в этом случае в том, чтобы складывать один в аккумулятор deberГ, - чтобы быть достаточным:

const array = [[false, false], [false, true], [true, true]];

console.log(array.reduce((a,b)=>b?a+1:a, 0));

Из всех форм, ты можешь делать это формой mГЎs простая используя flat и filter:

const array = [[false, false], [false, true], [true, true]];

console.log(array.flat().filter(v => v).length)
1
ответ дан 23.12.2019, 22:06

Я понимаю, что самая короткая и работоспособная форма состоит в том, чтобы делать .flat и потом .reduce:

const array = [[false, false], [false, true], [true, true]];

const res = array.flat().reduce((p,c)=>p+c);

console.log(res);

false serГЎn 0 и true 1. Это vГЎlido одинокий, если стоимость - true или false.

1
ответ дан 23.12.2019, 22:06