javascript数组方法排序返回大于50的120

标签 javascript

<分区>

以下代码对数组中的整数进行错误排序,结果为:1,10,100,30,40,50,80

var arr = new Array();

arr = [50,100,30,40,80,10,1];

var z = arr.sort();

console.error(z);

最佳答案

根据 Array.prototype.sort 的文档,“默认排序顺序是根据字符串 Unicode 代码点。”这将为您提供一个词法排序,您通常不需要对数字进行排序。

具体来说,section 22.1.3.24.1ECMAscript spec定义普通排序函数,第 5 步和第 7 步将参数显式转换为字符串:

  1. Let xString be ToString(x).
  2. ReturnIfAbrupt(xString).
  3. Let yString be ToString(y).
  4. ReturnIfAbrupt(yString).
  5. If xString < yString, return −1.
  6. If xString > yString, return 1.
  7. Return +0.

您应该提供自己的排序函数,不将值视为字符串,例如:

var arr = new Array();

arr = [50, 100, 30, 40, 80, 10, 1];

var z = arr.sort(function(a, b) {
  if (a < b) return -1;
  if (b < a) return +1;
  return 0;
});

console.log(z);

关于javascript数组方法排序返回大于50的120,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37463901/

相关文章:

javascript - 在循环( Node )中使用 Promise

javascript - div 内 div 的固定位置

javascript - js中内置对象类型在控制台中的不同类型名称

javascript - jQuery .hover() 实现中出现错误,但看起来与文档示例完全相同

javascript - getElementsByName() 是否保证顺序?

javascript - 使用 Vue.js 和 Firebase 进行验证

javascript - 在 box2d/matter.js 中查找运动的法向和切向分量

javascript 编码 - 多个输入和输出,以及查找输出

javascript - 动态生成自定义类

javascript - 将对象数据传递给上层对象属性