在 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 ]

以上是 在 JavaScript 中重新排列数组元素 的全部内容, 来源链接: utcz.com/z/359631.html

回到顶部