【问题标题】:Rearrange an array in maximum minimum form by javascript通过javascript以最大最小形式重新排列数组
【发布时间】:2017-10-12 11:44:13
【问题描述】:

在输出数组中应该是[第 1 高、第 1 低、第 2 高、第 2 低,依此类推] 例如:-
输入:arr[] = {1, 2, 3, 4, 5, 6, 7} 输出:arr[] = {7, 1, 6, 2, 5, 3, 4}

【问题讨论】:

  • 请为您的问题提供更多输入
  • 输入数组是否已经排序?
  • 给出的信息不符合标准。请分享一些细节以便我们提供帮助
  • @gurvinder372 no input array is not sorted
  • @Dream_Cap 输出数组应该有一个元素,依次显示最高元素和最低元素,然后是第二高和第二低,然后是第三高和第三低……就像这样。你可以制作自己的数组。

标签: javascript arrays sorting output


【解决方案1】:

首先,使用有效的 JS 语法。

迭代数组,递增 2。在每次迭代中,从数组中弹出最后一项并将其拼接到当前索引处的位置。

var arr = [1, 2, 3, 4, 5, 6, 7];

arr.sort((a, b) => a-b);

for (var i = 0; i < arr.length; i+=2) {
  arr.splice(i, 0, arr.pop());
}

console.log(arr);

【讨论】:

  • 这没有提供预期的输出
  • @RomanPerekhrest:嗯,我的想法暂时颠倒了职位要求。只需删除.splice() 中的+ 1。在您发表评论时修复它。
  • 感谢它有效,但不是 arr.sort((a, b) => a-b);...arr.sort((a, b) => b-a);将提供所需的输出,但它有效:)
  • @ManiSingh:是的,也可以这样工作。我更新了答案以在.splice() 而不是.sort() 上修复它。无论哪种方式都很好。 :)
【解决方案2】:

您可以解决所需的索引,将值放在哪里。这个提议需要一个排序数组。

它可以在不改变数组的情况下工作。

var array = [1, 2, 3, 4, 5, 6, 7],
    result = array.reduce(function (r, a, i, aa) {
        r[i < aa.length >> 1 ? i * 2 + 1 : (aa.length - i - 1) * 2] = a;
        return r;
    }, []);
    
console.log(result);

简单的解决方案。有突变。

var array = [1, 2, 3, 4, 5, 6, 7],
    result = [],
    action = 'shift',
    toggle = { pop: 'shift', shift: 'pop' };

while (array.length) result.push(array[action = toggle[action]]());

console.log(result);

【讨论】:

  • 次要细节,但您需要先对数组进行排序。
【解决方案3】:

又快又脏,似乎行得通

function maxminform(arr){
  arr = arr.sort();
  var res = [];
  for(var i=0, j = arr.length-1; i <= j; i++, j--){
    if(i != j) res.push(arr[j]);
    res.push(arr[i]);
  }
  return res;
}


var a = [5,6,2,3,8,1,4,7];
console.log(maxminform(a));

【讨论】:

    【解决方案4】:

    这里我先创建了一个排序数组,做[].concat也是防止改变原始数组的好方法。

    然后我映射结果,。如果映射索引的模数 = 0,我们从数组末尾取下一个数字,否则我们从开头取。 dv 变量将是我们取值的起点和终点的距离。

    const arr = [1, 7, 4, 5, 3, 6, 2];
    
    const sorted = 
      [].concat(arr).sort((a,b) => a-b).map((a, ix, arr) => {
        const isEnd = ix % 2;
        const dv = Math.trunc(ix / 2);
        if (!isEnd) return arr[arr.length -1 -dv];
        else return arr[dv];
      });
    
    console.log(sorted);

    【讨论】:

      【解决方案5】:

      要获得连续的 max/min 对 ...

      var arr = [1, 2, 3, 4, 5, 6, 7], 
          result = [];
      	
      for(var i=0; i < arr.length; i++) {
          var max = Math.max.apply(null, arr), min = Math.min.apply(null, arr);
          arr.splice(arr.indexOf(max), 1);
          arr.splice(arr.indexOf(min), 1);
          result.push(max, min);
      }
      if (arr.length) result.push(arr.pop());
      
      console.log(result);

      【讨论】:

        【解决方案6】:

        var a = [1, 2, 3, 7, 5, 6, 4];
        var ans = [];
        
        a.sort(function(a, b) {
          return a - b;
        })
        
        //For Even length
        if (a.length % 2 == 0) {
          for (i = 0; i < a.length / 2; i++) {
            ans.push(a[a.length - 1 - i]);
            ans.push(a[i]);
          }
        }
        //For Odd length
        else {
          ans.push(a[a.length - 1])
          a.pop();
          for (i = 0; i < a.length / 2; i++) {
            ans.push(a[i]);
        
            ans.push(a[a.length - 1 - i]);
          }
        }
        console.log(ans);

        【讨论】:

          【解决方案7】:
          function maxMin(arr){ 
          let temp = [];
          let small = 0;
          let large = arr.length - 1;
          
          for (let i = 0; i < arr.length; i++) {
            if (small < large) {
            temp.push(arr[large]);
            temp.push(arr[small]);
            small++;
            large--; 
             }
          
          }
          //length of array if its  not even
          if(arr.length % 2 !==0){
            let i = Math.floor(arr.length/2)
            temp.push(arr[i])
          }
           return temp;
          }
          

          【讨论】:

            猜你喜欢
            • 2020-06-07
            • 2019-03-11
            • 2016-09-26
            • 1970-01-01
            • 2013-01-14
            • 2015-07-03
            • 2013-01-10
            • 1970-01-01
            • 2016-07-31
            相关资源
            最近更新 更多