2017-10-09 106 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

謝謝! ^^ –

相關問題