假设我有一个包含n
元素的数组,其中一些可能会出现多次。
我想选择该数组中最常出现的顶级m
元素。
有人可以帮我吗?
例如,假设数组为[1, 3, 2, 3, 5, 2, 2, 3, 6, 8, 9]
且带有n=11
个元素。如果我想选择它们的前m=2
,则会2
和3
。
最好的脚本是什么?
答案 0 :(得分:2)
您可以创建一个临时对象来保存key: count
之类的事件。然后使用Object.keys
返回的数组对对象值进行排序。然后slice
以.reverse()
顺序排列该数组中的最后一个“ n ”元素。
以下是一个示例实用程序函数,用于获取 top “ n ” max 次出现。 注意:正如评论中所述的@n 6 ,这忽略了关系。
演示小提琴:http://jsfiddle.net/abhitalks/s43k6vsq/
<强> 段 强>:
var data1 = [1, 3, 2, 3, 5, 2, 2, 3, 6, 8, 9],
data2 = [4, 4, 4, 2, 2, 1, 5, 5, 8, 8, 8, 8, 3],
data3 = [3, 23, 23, 45, 54, 54, 54];
// Function parameters = Data Array and top "n" elements to find
function getMax(data, n) {
var tmp = {}, tops = [];
// Create object with count of occurances of each array element
data.forEach(function(item) {
tmp[item] = tmp[item] ? tmp[item]+1 : 1;
});
// Create an array of the sorted object properties
tops = Object.keys(tmp).sort(function(a, b) { return tmp[a] - tmp[b] });
// Return last n elements in reverse order
return tops.slice(-(n)).reverse();
}
// Test with sample data and top "n"
snippet.log(getMax(data1, 2));
snippet.log(getMax(data2, 3));
snippet.log(getMax(data3, 1));
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
*使用TJ Crowder的脚本将 console.log发送到snippet.log 。请参见此处:https://meta.stackexchange.com/a/242144/230147和此处:https://meta.stackexchange.com/a/242144/134069
答案 1 :(得分:1)
解决方案:
var arr = [1,2,3,41,11,2,3,4,1];
var sorted = [];
for (var i = 0; i < arr.length; i++) {
var index = -1;
for (var j = 0; j < sorted.length; j++) {
if (sorted[j].val == arr[i]) index = j;
}
if (index == -1) {
sorted.push({val: arr[i], count: 1})
}
else {
sorted[index].count++;
}
}
console.log(sorted.sort(function(a,b){
if (a.count > b.count) return -1;
if (a.count < b.count) return 1
return 0
})[0])