从Java数组中提取虚假值

时间:2019-02-18 21:48:05

标签: javascript boolean

我试图编写一个函数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 :(得分:1)

您可以检查该值,然后以该值作为键进行计数。

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)]));

答案 1 :(得分:0)

@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的方法稍长,但在功能上等效。真的,完全一样。