How to get n largest elements from array in JavaScript ?
Here in this article, we will see how we can find the n maximum element from the array using Javascript.
Example:
Input: arr = [1, 2, 3, 4, 5, 6], n = 3;
Output: 4, 5, 6
Explanation: Here we will see the 3 largest elements in the given array are 4, 5, 6.Input: arr = [5, 76, 32, 98, 52, 57] n = 2;
Output: 98 , 76
There are some common ways to find the solution, and we will learn both of them one by one:
Table of Content
Brute Force Approach
We will first make an array named largArr having a length equal to n. Then for each index of largArr, we will fill the element from the array one by one
Example: If we have n=3 then array largArr will be having a length equal to 3 then we will run for loop one by one to fill the element in the largArr.
let largArr = new Array();
let arr = new Array(93, 17, 56, 91,
98, 33, 9, 38, 55, 78, 29, 81, 60);
function largest() {
largArr[0] = 0;
largArr[1] = 0;
largArr[2] = 0;
for (i = 0; i < arr.length; i++) {
if (arr[i] > largArr[0]) {
largArr[0] = arr[i];
}
}
for (i = 0; i < arr.length; i++) {
if (arr[i] > largArr[1]
&& arr[i] < largArr[0]) {
largArr[1] = arr[i];
}
}
for (i = 0; i < arr.length; i++) {
if (arr[i] > largArr[2]
&& arr[i] < largArr[1]) {
largArr[2] = arr[i];
}
}
console.log(largArr[0]);
console.log(largArr[1]);
console.log(largArr[2]);
}
largest();
Output:
98
93
91
Optimized Solution: We first sort the array in decreasing order and then we run the loop for the length equal to n and print the first n largest elements.
Example:
let largArr = new Array();
let arr = new Array(93, 17, 56, 91, 98,
33, 9, 38, 55, 78, 29, 81, 60);
findLargest3();
function findLargest3() {
arr.sort((a, b) => a < b ?
1 : a > b ? -1 : 0);
console.log(arr[0]);
console.log(arr[1]);
console.log(arr[2]);
console.log(arr.slice(0, 3));
}
Output:
98
93
91
[98,93,91]
Using Math.max and filter() method
The approach combines Math.max to find the maximum element and filter to remove each found maximum from the array iteratively until `n` largest elements are obtained. This strategy efficiently retrieves the desired elements from the array.
Example: In this example This function returns the n largest elements from an array using Math.max and filter, demonstrated with an example array and n value.
function getNLargestElementsWithFilter(arr, n) {
const largestElements = [];
for (let i = 0; i < n; i++) {
const max = Math.max(...arr);
largestElements.push(max);
arr = arr.filter(num => num !== max);
}
return largestElements;
}
const array = [1, 8, 3, 5, 9, 2];
console.log(getNLargestElementsWithFilter(array, 3));
Output
[ 9, 8, 5 ]
Using Array.reduce
Using `Array.reduce`, iterate through the array, maintaining an accumulator array of the n largest elements. If an element is larger than any in the accumulator or the accumulator's length is less than n, add it, then sort and slice the result.
Example:
const array = [10, 5, 20, 8, 15];
const n = 3;
const largestElements = array.reduce((acc, curr) => {
if (acc.length < n || curr > acc[acc.length - 1]) {
acc.push(curr);
acc.sort((a, b) => b - a).slice(0, n);
}
return acc;
}, []);
console.log("Largest elements:", largestElements);
Output
Largest elements: [ 20, 15, 10, 8, 5 ]