【问题标题】:Extracting falsy values from array in Javascript在Javascript中从数组中提取虚假值
【发布时间】:2019-02-18 21:48:04
【问题描述】:

我正在尝试编写一个函数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; 

【问题讨论】:

  • 欢迎来到 Stack Overflow!如果您发布一些代码,显示您迄今为止尝试过的内容以及出现的问题,我们将能够更好地为您提供帮助。
  • I am trying to write a function 在哪里?你试过什么?

标签: javascript boolean


【解决方案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)]));

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2022-06-28
      • 2019-05-23
      • 1970-01-01
      • 2015-12-30
      • 2017-08-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多