我有一个看起来像这样的多维数组:
[
[ 30, 40 ]
[ 40, 40 ]
[ 100, 100 ]
[ 100, 100 ]
[ 100, 100 ]
[ 200, 100 ]
[ 200, 200 ]
]
如何从中获得最常见的值对 - [100, 100]
?
我有一个看起来像这样的多维数组:
[
[ 30, 40 ]
[ 40, 40 ]
[ 100, 100 ]
[ 100, 100 ]
[ 100, 100 ]
[ 200, 100 ]
[ 200, 200 ]
]
如何从中获得最常见的值对 - [100, 100]
?
这很有趣,我会遍历这些对并用 散列它们item.join("-")
,而不是尝试手动检查对中的每个项目。这也适用于任意长度的对。然后只需将对象中的 has 保存为键,值为发生率。然后你可以抓住最大值并将哈希拆分回来item.split("-")
得到你的对
更新
这是一个稍微优化的版本,带有一个循环。它不会处理有两对相同频率的不同对的情况,但最后一对都可以。它只会返回第一个答案
这将创建一个对数组和相应的出现次数。然后它找到出现次数最多的对。这是小提琴。
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.');
如果需要,您可以添加另一个循环来查找出现次数最多的任何对。