在 JavaScript 中重新排列数组元素
问题
JavaScript 函数使用数组的第一项和唯一一个参数作为数组文字 arr,其中包含一些相邻的重复项。
我们的函数应该重新排列数组元素,以确保数组中没有两个元素相等。我们的函数应该返回重新排列后的数组,假设存在至少一种可能的排列方式。
例如,如果输入函数为 -
const arr = [7, 7, 7, 8, 8, 8];
那么输出应该是 -
const output = [7, 8, 7, 8, 7, 8];
输出解释
还可能存在其他可能的排列。
示例
代码如下 -
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));
输出
控制台中的输出为 -
[ 8, 7, 8, 7, 8, 7 ]
广告