
- Javascript Basics Tutorial
- Javascript - Home
- Javascript - Overview
- Javascript - Syntax
- Javascript - Enabling
- Javascript - Placement
- Javascript - Variables
- Javascript - Operators
- Javascript - If...Else
- Javascript - Switch Case
- Javascript - While Loop
- Javascript - For Loop
- Javascript - For...in
- Javascript - Loop Control
- Javascript - Functions
- Javascript - Events
- Javascript - Cookies
- Javascript - Page Redirect
- Javascript - Dialog Boxes
- Javascript - Void Keyword
- Javascript - Page Printing
- JavaScript Objects
- Javascript - Objects
- Javascript - Number
- Javascript - Boolean
- Javascript - Strings
- Javascript - Arrays
- Javascript - Date
- Javascript - Math
- Javascript - RegExp
- Javascript - HTML DOM
- JavaScript Advanced
- Javascript - Error Handling
- Javascript - Validations
- Javascript - Animation
- Javascript - Multimedia
- Javascript - Debugging
- Javascript - Image Map
- Javascript - Browsers
- JavaScript Useful Resources
- Javascript - Questions And Answers
- Javascript - Quick Guide
- Javascript - Functions
- Javascript - Resources
Rearranging array elements in JavaScript
Problem
JavaScript function that takes in an array of literals, arr, as the first and the only argument. This array contains some duplicates placed adjacently.
Our function should rearrange the elements of the array such that no two elements in the array are equal. Our function should return the rearranged array, given that it's guaranteed that there exists at least one possible way of such arrangement.
For example, if the input to the function is −
const arr = [7, 7, 7, 8, 8, 8];
Then the output should be −
const output = [7, 8, 7, 8, 7, 8];
Output Explanation:
There may be other correct possible rearrangements as well.
Example
The code for this will be −
const arr = [7, 7, 7, 8, 8, 8]; const rearrangeArray = (arr = []) => { const map = arr.reduce((acc, val) => { acc[val] = (acc[val] || 0) + 1 return acc; }, {}); const keys = Object.keys(map).sort((a, b) => map[a] - map[b]); const res = []; let key = keys.pop(); for(let i = 0; i < arr.length; i += 2){ if(map[key] <= 0){ key = keys.pop(); }; map[key] -= 1; res[i] = Number(key); }; for(let i = 1; i < arr.length; i += 2){ if(map[key] <= 0){ key = keys.pop(); }; map[key] -= 1; res[i] = Number(key); }; return res; }; console.log(rearrangeArray(arr));
Output
And the output in the console will be −
[ 8, 7, 8, 7, 8, 7 ]
- Related Articles
- Rearranging elements of an array in JavaScript
- Check whether an array can fit into another array by rearranging the elements in the array
- Rearranging cards into groups in JavaScript
- Consecutive elements sum array in JavaScript
- Alternatingly combining array elements in JavaScript
- How to replace elements in array with elements of another array in JavaScript?
- Rearranging digits to form the greatest number using JavaScript
- Finding upper elements in array in JavaScript
- Accumulating array elements to form new array in JavaScript
- Counting unique elements in an array in JavaScript
- Elements that appear twice in array in JavaScript
- Commons including duplicates in array elements in JavaScript
- Remove elements from array using JavaScript filter - JavaScript
- Absolute sum of array elements - JavaScript
- Compare array elements to equality - JavaScript

Advertisements