使用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));
控制台日志(结果)代码>