【问题标题】:Get number of non-empty elements from nested arrays从嵌套数组中获取非空元素的数量
【发布时间】:2016-02-21 12:51:10
【问题描述】:

我有十个空值数组

onTable[0 to 10];

["Jean5", "Jean3", "Paul2", "Jean6", "", "Paul4", "Jean", "peirre4", ""]
["Paul5", "peirre6", "peirre3", "", "Jean4", "Paul", "peirre5", "Jean2", ""]
...

我想得到每个数组的长度,没有空值,也没有创建十个变量来检查。

我已经测试了这个解决方案 count empty values in array 但我不想让十个变量。即:count1, count2,....

我也检查了compare two arrays based on length: skip empty values,但这不是我想要的。

如果可能的话,我想要这个样子

onTable[0].length(exclude(""))

这样做的好方法是什么?

【问题讨论】:

  • 使用 filter() 并删除空值然后得到它的长度
  • 我不想从数组中删除值
  • 过滤器不会更新现有数组....它只是返回新数组

标签: javascript jquery arrays


【解决方案1】:

您应该避免“浪费”内存和引发过多的 GC。你可以reduce()每个子数组来计算它的非空值:

sub.reduce(function(prev, cur) {
  return prev + (!!cur);
}, 0);

为了处理整个主数组,你可以map()它的长度:

var arr = [
  ["Jean5", "Jean3", "Paul2", "Jean6", "", "Paul4", "Jean", "peirre4", ""],
  ["Paul5", "peirre6", "peirre3", "", "Jean4", "Paul", "peirre5", "Jean2", ""],
  ["Just1", "", ""]
];

var lengths = arr.map(function(sub) {
  return sub.reduce(function(prev, cur) {
    return prev + (!!cur);
  }, 0);
});
document.write('[' + lengths.join('], [') + ']');

【讨论】:

    【解决方案2】:

    prototype:

    Array.prototype.lengthWihtoutEmptyValues = function () {
        var initialLength = this.length;
        var finalLength = initialLength;
    
        for (var i = 0; i < initialLength; i++) {
            if (this[i] == "") {
                finalLength--;
            }
        }
    
        return finalLength;
    }
    
    var arrays = [
      ["Jean5", "Jean3", "Paul2", "Jean6", "", "Paul4", "Jean", "peirre4", ""],
      ["Paul5", "peirre6", "peirre3", "", "Jean4", "Paul", "peirre5", "Jean2", ""]
    ];
    
    var arrayLength = arrays[0].lengthWihtoutEmptyValues();
    
    $("#arrayLength").html(arrayLength);
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div id="arrayLength"></div>

    【讨论】:

      【解决方案3】:

      您可以根据需要使用过滤功能:检查undefinednull等的值。

      var arr = [
        ["Jean5", "Jean3", "Paul2", "Jean6", "", "Paul4", "Jean", "peirre4", ""],
        ["Paul5", "peirre6", "peirre3", "", "Jean4", "Paul", "peirre5", "Jean2", ""]
      ];
      
      var len = arr[1].filter(function(x){ return x != ""}).length;
      document.write(len);

      【讨论】:

        【解决方案4】:

        使用filterBoolean 过滤子数组中的非空元素并在其上使用length

        onTable[0].filter(Boolean).length
        

        由于空字符串在 JavaScript 中是虚假的,它将从过滤数组中删除。

        演示:

        var arr = [
          ["Jean5", "Jean3", "Paul2", "Jean6", "", "Paul4", "Jean", "peirre4", ""],
          ["Paul5", "peirre6", "peirre3", "", "Jean4", "Paul", "peirre5", "Jean2", ""]
        ];
        
        var len = arr[1].filter(Boolean).length;
        document.write(len);

        【讨论】:

        • ? 谢谢!!!!你拯救了我的一天。再次感谢?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-23
        • 1970-01-01
        • 2018-08-29
        • 2019-04-16
        • 1970-01-01
        相关资源
        最近更新 更多