找到数组中臭名昭着的元素

时间:2017-05-22 05:32:01

标签: javascript

我想使用javascript在数组中找到臭名昭着的元素。 我找到了最常见的元素,现在我需要找到一个臭名昭着的数组元素。   数组:[4,4,4,4,1,4,4]

任何想法?

2 个答案:

答案 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));