我想使用javascript在数组中找到臭名昭着的元素。
我找到了最常见的元素,现在我需要找到一个臭名昭着的数组元素。
数组:[4,4,4,4,1,4,4]
任何想法?
答案 0 :(得分:1)
这是一个简单的解决方案,可以找出数组中着名且臭名昭着的元素 -
var mainArr = [4,4,4,4,1,4,4];
var ele = [], occ = [];
var str = "";
for(var index,count=0;count<mainArr.length;count++){
index = ele.indexOf(mainArr[count]);
if(index > -1){
occ[index]++;
}else{
ele.push(mainArr[count]);
occ.push(1);
}
}
console.log("Infamous : "+ele[occ.indexOf(Math.min.apply(null, occ))]);
console.log("Famous : "+ele[occ.indexOf(Math.max.apply(null, occ))]);
答案 1 :(得分:0)
您可以首先迭代数组并计算每个元素出现的次数。由于您需要最小公共值的第一个实例,因此您还需要在值第一次出现时存储索引,因为您不能依赖于它们在对象未被排序时插入到对象中的顺序。
然后找到具有最低索引的最小公共值,例如
var data = [4,4,4,4,1,4,4,2,4,4];
var values = data.reduce(function (acc, value, i) {
if (!acc.hasOwnProperty(value)) {
acc[value] = {count: 0, index: i};
}
acc[value].count++;
return acc;
}, {});
console.log('Collated values:\n' + JSON.stringify(values));
var result = Object.keys(values).reduce(function(acc, value) {
var obj = values[value];
if (obj.count <= acc.count && obj.index < acc.index ) {
acc = {value: value, count: obj.count, index: obj.index};
}
return acc;
}, {value: null, count: Infinity, index: Infinity});
console.log('Result:\n' + JSON.stringify(result));