最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Getting the maximum of array, sort() vs reduce() - Stack Overflow

programmeradmin5浏览0评论

Assume we have some array and I want to get the maximum of the elements.

array.sort((a, b) => b - a)[0]

and

array.reduce((a, b) => (a > b) ? a : b)

will both return the maximum.

The question is, which one is preferred?

For a specific case of my project, I could be iterating over 100+ elements, 100+ times which I thought would be big enough to matter for the small performance difference.

Assume we have some array and I want to get the maximum of the elements.

array.sort((a, b) => b - a)[0]

and

array.reduce((a, b) => (a > b) ? a : b)

will both return the maximum.

The question is, which one is preferred?

For a specific case of my project, I could be iterating over 100+ elements, 100+ times which I thought would be big enough to matter for the small performance difference.

Share Improve this question asked Nov 27, 2017 at 11:11 Jun ParkJun Park 5581 gold badge7 silver badges20 bronze badges 7
  • I think array.reduce is faster. Sorting always needs more operations behind – Faly Commented Nov 27, 2017 at 11:14
  • 4 I would prefer Math.max(...arr) myself – Karl Reid Commented Nov 27, 2017 at 11:14
  • 2 reduce is O(n), sort is O(nlogn). – Nina Scholz Commented Nov 27, 2017 at 11:14
  • 1 @KarlReid Math.max is not remended for large array. – priyadarshi swain Commented Nov 27, 2017 at 11:21
  • 1 @NinaScholz I didn't know that. Sounds like reduce is the winner then. :D – Jun Park Commented Nov 27, 2017 at 11:22
 |  Show 2 more ments

2 Answers 2

Reset to default 7

array.reduce seems faster..

var numbers = [];


function myFunction(item) {
 for (var i = 0 ; i<100000 ; i++)
 {
   numbers.push(i); 
 }


 var t0 = performance.now();
 var x = numbers.reduce((a, b) => (a > b) ? a : b);
 var t1 = performance.now()
 document.getElementById("timex").innerHTML = (t1 - t0) + " milliseconds";
 
 var t2 = performance.now();
 var y = numbers.sort((a, b) => b - a)[0];
 var t3 = performance.now();
 
 document.getElementById("timey").innerHTML = (t3 - t2) + " milliseconds";
 document.getElementById("reduce").innerHTML = x
 document.getElementById("sort").innerHTML = y
}
<html>
<body>

<p>Click the button to get the highest numbers in the array.</p>
<button onclick="myFunction()">Try it</button>

<p>Highest number (array.reduce): <span id="reduce"></span>  time taken : <span id="timex"></span></p>
<p>Highest number(array.sort): <span id="sort"></span> time taken:<span id="timey"></p>


<script>

</script>

</body>
</html>

I tried to check performance and this is result, hope you know more about them.

发布评论

评论列表(0)

  1. 暂无评论