以降序和升序对数组进行排序

时间:2019-04-07 20:22:32

标签: javascript arrays loops

编写一个名为compareArrays()的函数,该函数接受两个数组(每个数组的长度可以是任意数字)   并将这两个数组的第一个元素按升序写入页面。   它还以降序写入这两个数组的最后一个元素。 我可以在我的代码中更正什么?问题出在哪里?前4个元素应升序,后4个元素应降序。

function compareArrays(y, z) {

  for (x = 0; x < y.length; y++) {
    Array.sort((Function(y, z) {
        return z - y
      });

    }
    for (p = 0; p < z.length; z++) {
      Array.sort((function(y, z) {
          return y - z
        })
      }
    }
    var one = [10, 20, 30, 40, 50, 60, 70, 80];

    var two = [60, 70, 80, 90, 100, 110, 120, 130];

2 个答案:

答案 0 :(得分:1)

仅按升序中途显示原始数组,而按降序中途显示原始数组的问题是,输出将为80、70、60、50、10、20、30、40,因为当数组获得消息开始按降序排序,它将把所有从50开始的数字放在10 20 30 40之前,因为它的数字更高,需要先行。

因此,要获得10、20、30、40、80、70、60、50的输出,可以将数组拆分为2个新数组,然后对其进行排序,然后再次将它们组合在一起,如下所示:

function sortArrays(a) {
 //slices the value of the passed in array in half, and makes 2 new arrays of it
  var arrayLength1 = a.length;
  var arrayHalf = arrayLength1 / 2;
  var firstHalf = a.slice(0,arrayHalf);
  var secondHalf = a.slice(arrayHalf);

  // sorts one array ascending and the other descending
   firstHalf.sort(ascendingFunction);
   secondHalf.sort(descendingFunction);

 //combines together the 2 arrays, already sorted one ascending and one descending
   var newSortedArray = firstHalf.concat(secondHalf); 
   alert(newSortedArray); // the output you want
    }
function ascendingFunction(a,b){
    return  a - b
    } 

function descendingFunction(a,b){
    return  b - a
    } 

var one = [10, 20, 30, 40, 50, 60, 70, 80];

var two = [60, 70, 80, 90, 100, 110, 120, 130];

现在您可以调用该函数并传递所需的任何数组,例如:

sortArrays(one);
sortArrays(two);

答案 1 :(得分:0)

您有很多语法错误-您还试图对Array本身进行排序,这是不应该的。您需要按升序和降序对放入的数组进行排序,然后将其写出:

function compareArrays(arr1, arr2) {
  arr1.sort((a, b) => b - a);
  arr2.sort((a, b) => b - a);
  console.log(`First in ascending order: ${arr1[0]} and ${arr2[0]}`);
  arr1.sort((a, b) => a - b);
  arr2.sort((a, b) => a - b);
  console.log(`Last in descending order: ${arr1[arr1.length - 1]} and ${arr2[arr2.length - 1]}`);
}

var one = [10, 20, 30, 40, 50, 60, 70, 80];
var two = [60, 70, 80, 90, 100, 110, 120, 130, 140, 150];
compareArrays(one, two);
.as-console-wrapper { max-height: 100% !important; top: auto; }