JavaScript:按顺序重新排列数组-最大,最小,第二大,第二小,第三大,第三小,

时间:2020-07-21 12:37:12

标签: javascript

给出一个整数数组,其中值应按以下顺序排序: 如果我们有一个数组

[1, -1, -3, 9, -2, -5, 4, 8,]

我们必须这样重新排列:最大数字,最小数字,第二大数字,第二小数字...

[9, -5, 8, -3,  4, -2, 1, -1 ]

我得到了第一个最大和最小的数字,但无法弄清楚如何使它对于数组中的所有值都是动态的。

我知道我必须使用两个变量,例如 firstSmallest firstLargest 并将它们分别指向数组的第一个索引和最后一个索引,然后运行一个循环在下面的代码中进行操作,并通过递增 firstSmallest 并递减 firstLargest 将值存储到新数组中,但无法实现为代码。

let unsortedArr = [1, 5, 8 , 7, 6, -1, -5, 4, 9, 5]

let output = [];

function meanderArray(unsorted){
  let sorted = unsorted.sort((a, b) => a-b);
  let firstSmallest = sorted[0];
  let firstLargest = sorted[unsorted.length-1];

  for(let i = 0; i <= sorted.length; i++){
  //I should increment firstSmallest and decrement firstLargest numbers and store in output
  } 
 return output;
}
meanderArray(unsortedArr);
console.log(output);

3 个答案:

答案 0 :(得分:3)

您可以使用一个切换对象,该对象从数组中获取第一项或最后一项的属性,并进行迭代,直到没有更多可用项为止。

function meanderArray([...array]) {
    const 
        result = [],
        toggle = { shift: 'pop', pop: 'shift' };

    let fn = 'shift';

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

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

    return result;
}


console.log(...meanderArray([1, 5, 8, 7, 6, -1, -5, 4, 9, 5]));

答案 1 :(得分:1)

您可以按降序对数组进行排序,其逻辑如下:从头开始,从头开始,然后从开始第二,从头开始,第二等等,等等。

let unsortedArr = [1, 5, 8 , 7, 6, -1, -5, 4, 9, 5]

let output = [];

function meanderArray(unsorted){
  let sorted = unsorted.sort((a, b) => b-a);
  let output = []

  for(let i = 0; i < sorted.length/2; i++){
    output.push(sorted[i])
    if(i !== sorted.length - 1 - i){
      output.push(sorted[sorted.length - 1 - i])
    }
  } 
 return output;
}
let result = meanderArray(unsortedArr);
console.log(result);

答案 2 :(得分:1)

您可以排序,然后循环并使用pop()提取最后一个数字,并使用shift()提取第一个数字。

let unsortedArr = [1, -1, -3, 9, -2, -5, 4, 8,]
let output = [];

function meanderArray(unsorted){
    let sorted = unsorted.sort((a, b) => a - b);

    for(let i = 0; i < unsortedArr.length + 2; i++){
        output.push(sorted.pop());
        output.push(sorted.shift());
    } 
console.log(output);
return output;
}

meanderArray(unsortedArr);