2017-10-09 110 views
3
function findMaxOccurence(ar){  
     ar.sort().reverse() // Reverses a sorted array Max to min 
     count = 0; 
     for(i=0;i<ar.length;i++){ 
      ++count 
      if(i == ar.length - 1){//break out when last element reached 
       break 
      } 
      if(ar[i+1] != ar[i]){ 
       break 
      } 
     } 
    return count 
} 

如何查找Javascript数组中最高元素的出现次数?如何查找Javascript数组中最高元素的出现次数?

+0

可用代码有什么问题? – Rajesh

+0

这并不完美! –

回答

6

您可以使用reduce方法来编写更简单的解决方案。

的减少()方法应用于对一个储液器的功能和阵列中的每个元件 (从左到右),以将其降低到单个 值。

let dataset = [2,8,4,8,6,4,7,8]; 
 
let max= Math.max(...dataset); 
 
var count = dataset.reduce(function(counter, value) { 
 
    return counter + (value === max); 
 
}, 0); 
 
console.log(count);

此外,您还可以通过传递一个回调功能使用filter方法。

let count = dataset.filter(x => x === max).length; 
+1

不错的解决方案! –

+0

@PaulFitzgerald,谢谢! –

+0

3个点的含义是什么? –

1

您可以在一个循环中使用Array#reduce并将对象作为临时结果集。

function findMaxOccurence(array) { 
 
    return array.reduce(function(r, a) { 
 
     if (!r || a > r.value) { 
 
      return { value: a, count: 1 }; 
 
     } 
 
     if (r.value === a) { 
 
      r.count++; 
 
     } 
 
     return r; 
 
    }, undefined).count; 
 
} 
 

 
console.log(findMaxOccurence([1, 3, 4, 2, 4, 2, 1, 3]));

+0

这个解决方案看起来不错。 –

1

看到以下两种方法:

function findMaxOccurence(ar){  
    ar.sort().reverse(); // Reverses a sorted array Max to min 
    var count = 1; 
    for(var i = 1; i < ar.length; i++){ 
     if(ar[i] == ar[0]) 
      count++; 
    } 
    return count 
} 

function findMaxOccurence(ar){  
    ar.sort().reverse(); // Reverses a sorted array Max to min 
    var count = 1; 
    for(var i = 1; i < ar.length; i++){ 
     if(ar[i] != ar[0]) 
      break; 
     count++; 
    } 
    return count 
} 
1

您可以使用下面提供这两种解决方案,只记得过滤器解决方案是一个有点快^^

//Code 
 

 
let dataset = [2,8,4,8,6,4,7,8]; 
 

 
let t0 = performance.now(); 
 
countWithReduce(dataset); 
 
let t1 = performance.now(); 
 
console.log("Call to countWithReduce took " + (t1 - t0) + " milliseconds.") 
 

 
t0 = performance.now(); 
 
countWithFilter(dataset); 
 
t1 = performance.now(); 
 
console.log("Call to countWithFilter took " + (t1 - t0) + " milliseconds.") 
 

 

 
//Functions 
 

 
function countWithReduce(arr){ 
 
    let max= Math.max(...arr); 
 
    let count = arr.reduce(function(counter, value) { 
 
     return counter + (value === max); 
 
    }, 0); 
 
    console.log(count); 
 
} 
 

 
function countWithFilter(arr){ 
 
    let max= Math.max(...arr); 
 
    let count = arr.filter(x => x === max).length; 
 
    console.log(count); 
 
}

+1

测试的好方案。 –

+0

谢谢! ^^ –

相关问题