在二维数组的一列上使用 map.reduce

Using map.reduce on one column from a 2d array

好的,所以我只想知道给定数据列中的数字 x。我知道我可以这样做:

function countx (data,column){
var result = 0;
for (var i=0; i<data.length;i++)
    {
    if(data[i][column]=="x") result++;    
    }  
return result;
}

但似乎使用 map.reduce 会更好,但我不确定如何在二维数组上使用 reduce,我在这里找到了关于这个主题的最流行的帖子比我的情况更复杂。

  • 您想将以下脚本转换为使用 map 和 reduce 的脚本。

    function countx (data,column){
    var result = 0;
    for (var i=0; i<data.length;i++)
        {
        if(data[i][column]=="x") result++;    
        }  
    return result;
    }
    

如果我的理解是正确的,这个答案怎么样?请将此视为几个可能的答案之一。

修改后的脚本:

function countx (data,column) {
  var result = data.reduce(function(c, e) {
    if (e[column] == "x") c++;
    return c;
  }, 0);
  return result;
}
  • 在你的脚本中,我认为 "reduce" 比 "map" 更合适。
  • 当使用"reduce"时,初始值可以给定为}, 0);
  • 在此修改后的脚本中,可以是 运行 启用和不启用 V8。

参考:

如果我误解了你的问题,这不是你想要的方向,我很抱歉。

最简单的方法是 filter:

function countx (data,column){
  return data.filter(row=>row[column]==="x").length;
}
console.info(countx([["a"],["b"],["x"],["x"],["c"]],0))