我有一个多维数组,如下所示:
[
[ 30, 40 ]
[ 40, 40 ]
[ 100, 100 ]
[ 100, 100 ]
[ 100, 100 ]
[ 200, 100 ]
[ 200, 200 ]
]
如何从中获取最常见的价值对 - [100, 100]
?
答案 0 :(得分:2)
这很有趣,我会遍历这些对并用item.join("-")
哈希,而不是手动检查对中的每个项目。这也适用于任意长度的对。然后只需将对象中的has保存为键,其值为出现率。那么你可以抓住最大值并将散列分回item.split("-")
以获得你的对
<强>更新强>
这是一个稍微更优化的版本,带有一个循环。它不会处理有两个不同的相同频率对的情况,但最后一个也是如此。它只会返回第一个答案
答案 1 :(得分:1)
这将创建一个对数组和相应的出现次数。然后它找到具有最多出现次数的对。这是fiddle。
var data = [
[ 30, 40 ],
[ 40, 40 ],
[ 100, 100 ],
[ 100, 100 ],
[ 100, 100 ],
[ 200, 100 ],
[ 200, 200 ]
];
var countData = new Array();
for (var i = 0; i < data.length; i++) {
// see if the pair exists, if not increment count
var exists = false
for (var j = 0; j < countData.length; j++) {
if (countData[j].pair[0] == data[i][0] && countData[j].pair[1] == data[i][1]) {
countData[j].count++;
exists = true;
}
}
if (!exists) {
var tmp = new Object();
tmp.pair = data[i];
tmp.count = 1;
countData.push(tmp);
}
}
var mostFrequentPair = { pair: null, count: 0 };
for (var i = 0; i < countData.length; i++) {
if (countData[i].count > mostFrequentPair.count) mostFrequentPair = countData[i];
}
console.log('The most frequent pair is [' + mostFrequentPair.pair + '] which occurs ' + mostFrequentPair.count + ' times.');
如果需要,您可以添加另一个循环,以查找与最高出现次数相关联的任何对。