Извлечение ложных значений из массива в Javascript - PullRequest
0 голосов
/ 19 февраля 2019

Я пытаюсь написать функцию sortBool(arr), чтобы взять массив и вернуть объект со счетчиком для каждого найденного ложного значения.

Например:

sortBool([1, 0, 10, 2-2, Math.sqrt(-1)]); // should return {0: 2, NaN: 1}

Пока что:

const sortBool = arr => {
  index = 0; 
  let falsyTypes = {}; 
  while (index < arr.length) { 
    if(eval(arr[index])) {
      index++; 
    }else {
      //some code to determine what type of falsy value each element is and then add it to the object
    }
  }
  return falsyTypes; 

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

Ответ @Nina Scholz правильный и является хорошим способом функционального решения проблемы.В долгосрочной перспективе изучение JavaScript - это путь.

На тот случай, если одновременно потребуется слишком много новых концепций, я предоставлю решение, более совместимое с реализованной вами функцией:

// you don't need lambda expressions, just a plain old function
function sortBool(arr) {
  var falsyTypes = {};

  // you can use a for for a slightly more compact syntax
  for(var index = 0; index < arr.length; index++) {
    var val = arr[index];

    // you don't need to eval. So please don't
    if (!val) {
      falsyTypes[val] = (falsyTypes[val] || 0) + 1;
    }
  }

  return falsyTypes; 
}

Как видите, метод немного длиннее, чем метод, использующий метод Reduce, но функционально эквивалентен.На самом деле, это точно так же.

0 голосов
/ 19 февраля 2019

Вы можете проверить значение и затем посчитать, взяв значение в качестве ключа.

function sortBool(array) {
    return array.reduce((r, v) => {
        if (!v) {
            r[v] = (r[v] || 0) + 1;
        }
        return r;
    }, {});
}

console.log(sortBool([1, 0, 10, 2 - 2, Math.sqrt(-1)]));
...