以自定义方式对数组进行排序?

时间:2020-03-04 07:31:00

标签: javascript arrays sorting

此代码的目标是对数组[1,2,3,4,5]进行排序,使其看起来像[5,3,1,2,4]。我还希望它对其他人发送给我的数组进行排序,例如,它应与[-10,-1,-4]一起使用,作为[-1,-10,-4]。应当使用以下规则对数组进行排序:

  • 最小的数字在中间。
  • 比最小的数字高的数字应该是正确的[2](在 第一个示例)。
  • 大于[2](在第一个示例中)的数字应保留 [1](在第一个示例中)。

到目前为止,这是我的主意:

let values = [1,2,3];
let storage = values.sort((a, b) => a - b);
let result = storage[0];

for( let i = 1; i <= (values.length/2); i+=2 ){
    result.unshift (storage[i]);
    result.push (storage[i+1]);

}
return result);

但是我无法使其工作,我迷失了目前可以改变的地方。

3 个答案:

答案 0 :(得分:1)

您需要将result设置为数组:

let values = [1,2,3];
let storage = values.sort((a, b) => a - b);
let result = [storage[0]];  // make the result an array

for( let i = 1; i <= (values.length/2); i+=2 ){
    result.unshift (storage[i]);
    result.push (storage[i+1]);
}
console.log(result);

答案 1 :(得分:1)

您可以进行蝴蝶排序,对奇数降序和偶数升序进行排序。

var array = [1, 2, 3, 4, 5];

array.sort((a, b) => b % 2 - a % 2 || (a % 2 ? b - a : a - b));

console.log(array);

答案 2 :(得分:1)

这是我的解决方法

function customSort(inputArray){
  var initialSort = inputArray.sort()

  var finalSorted = []
  finalSorted.push(initialSort[0])
  //console.log(finalSorted)
  for(i=1;i<initialSort.length;i++){
    if(i%2 === 0){
      finalSorted.unshift(initialSort[i])
    }
    else{
      finalSorted.push(initialSort[i])
    }
  
  }
  
  console.log(finalSorted)
  
}

var inputArray = [1,2,3,4,5]

customSort(inputArray)