使用javascript中的二维数组获得最高频率

使用javascript中的二维数组获得最高频率,javascript,arrays,Javascript,Arrays,我想知道如何获得二维数组中出现频率最高的字符串 例如,如果您有: const arr = [['foo','bar','21'], ['foo', 'lar','28'], ['loo', 'bar','28']] 您会在第1列中看到,foo是最常出现的字符串,第二列是bar,第三列是28 我拥有的阵列可能并不总是这个大小,因此我需要制作它,以便它可以采用任何大小 这是我尝试过的,但它很大,在二维空间中不太适用: function foo_f

我想知道如何获得二维数组中出现频率最高的字符串

例如,如果您有:

const arr = [['foo','bar','21'],
             ['foo', 'lar','28'],
             ['loo', 'bar','28']]
您会在第1列中看到,
foo
是最常出现的字符串,第二列是
bar
,第三列是
28

我拥有的阵列可能并不总是这个大小,因此我需要制作它,以便它可以采用任何大小

这是我尝试过的,但它很大,在二维空间中不太适用:

function foo_func(array){
  if(array.length == 0)
    return null;
    var modeMap = {};
    var maxEl = array[0], maxCount = 1;
    for(var i = 0; i < array.length; i++){
      var el = array[i];
      if(modeMap[el] == null)
         modeMap[el] = 1;
   }
return maxEl;
}
函数foo_func(数组){ 如果(array.length==0) 返回null; var modeMap={}; var maxEl=array[0],maxCount=1; 对于(var i=0;i
如果任何人有一个解决方案,这是一个小整洁或工程将不胜感激

您可以
缩减为一个数组,该数组的值是对象,其键是属性(例如
'foo'
),其值是该键在当前列中出现的次数:

const arr=[
[foo',bar',21'],
[foo',lar',28'],
['loo'、'bar'、'28']
];
const columns=arr.reduce((a,subar)=>{
子项forEach((项,i)=>{
如果(!a[i])a[i]={};
a[i][项目]=(a[i][项目]| | 0)+1;
});
返回a;
}, {});
const highestInEachColumnEntries=Object.values(columns.map)(
obj=>Object.entries(obj)
.减少(
(a,b)=>a[1]>b[1]?a:b
)
);
const highestInEachColumnKeysOnly=highestInEachColumnEntries.map(([key])=>key);

console.log(仅限HighestineachColumnKeys)一个想法是首先旋转阵列

然后使用reduce和filter就可以很容易地得到最常用的方法

最后将旋转后的数组映射到公共函数上

const arr=[
[foo',bar',21'],
[foo',lar',28'],
['loo'、'bar'、'28']
];
const rotated=arr[0].map((列,i)=>arr.map(行=>行[i]);
const common=arr=>arr.reduce((a,b,i,arr)=>
(arr.filter(v=>v==a).length>=arr.filter(v=>v==b).length?a:b));
const result=rotated.map(m=>common(m));
控制台日志(结果)