JavaScript 将数组中的数字按大小顺序排列

新手上路,请多包涵

题目来源及自己的思路

我时刚开始学习的小白,会的不多,在学习中发现数组在用sort()排序时并不是完全按大小顺序排列,和数字的位数还有关系,所以我想自己尝试让数组按从小到大的顺序排列,自己敲了一些代码,但是最后还是有问题,请各位大佬解释并求纠正方法。代码如下:

相关代码

var box=Array(12,8,24,23,54)

var x=box.length

var i=0

do{

i=i+1;  
var name="b"+i;  
window\[name\]=box.pop();  
console.log(name);  
var x=box.length;  

}while(x>0)

do{

if(b1<b2)  
{if(b2<b3)  
{if(b3<b4)  
{if(b4<b5)  
{b5=b5;  
}else{var x5=b5;b5=b4;b4=x5;}}else{var x4=b4;b4=b3;b3=x4;}}else{var x3=b3;b3=b2;b2=x3;}}else{var x2=b2;b2=b1;b1=x2;console.log(box=Array(b1,b2,b3,b4,b5))}}while(b1<b2<b3<b4<b5==true)  

你期待的结果是什么?实际看到的错误信息又是什么?

最后输出的数组是[8, 23, 24, 54, 12],最后两个还是没按顺序排列,请指教

阅读 4.6k
4 个回答
var arr = [12, 8, 24, 23, 54]
arr.sort(function ($1, $2) {
  return $1 < $2 ? -1 : 1
})

console.log('arr', arr) // => [8, 12, 23, 24, 54]

sort 函数可以接收一个比较函数作为参数, 根据比较函数的返回值确定两个值得先后顺序
参考: https://developer.mozilla.org...

下面是有没有对比函数的区别

function compare(a,b) {
    return Number(a) - Number(b)
}

var box = Array(12, 8, 24, 23, 54)
console.log(box.sort());
console.log(box.sort(compare));

不用整的那么复杂,其实用一串函数就能解决这些问题了:

// 用 obj 代替 window
var obj = {}
var box = [12,8,24,23,54]
  .sort((p, n) => p - n)
  .map((n, i, arr) => {
    // 倒序赋值
    var index = arr.length - i - 1;
    obj[`b${i}`] = arr[index]

    return n;
  })

console.log(box); // [8, 12, 23, 24, 54]
console.log(obj);
// {
//  "b0": 54,
//  "b1": 24,
//  "b2": 23,
//  "b3": 12,
//  "b4": 8
// }

上面代码中() => {...}等价于 function() {...}, 是 es6 的语法。
sort是数组排序方法,map 是遍历并返回新值,如果不需要 box 数组数据的话 甚至可以用 forEach 做遍历

新手上路,请多包涵

const b=box.sort((a,b)=>b-a)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题