Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 对数字数组排序_Javascript_Arrays_Sorting - Fatal编程技术网

Javascript 对数字数组排序

Javascript 对数字数组排序,javascript,arrays,sorting,Javascript,Arrays,Sorting,为什么这个代码有效 <!DOCTYPE html> <html> <body> <p id="demo">Click the button to sort the array.</p> <button onclick="myFunction()">Try it</button> <script> function myFunction() { var points = [40,100,1,

为什么这个代码有效

<!DOCTYPE html>
<html>
<body>

<p id="demo">Click the button to sort the array.</p>

<button onclick="myFunction()">Try it</button>

<script>
function myFunction()
{
   var points = [40,100,1,5,25,10];
   points.sort(function(a,b){return a-b});
   var x = document.getElementById("demo");
   x.innerHTML=points;
}
</script>
</body>
</html>

单击按钮对阵列进行排序

试试看 函数myFunction() { var点=[40100,1,5,25,10]; sort(函数(a,b){返回a-b}); var x=document.getElementById(“演示”); x、 innerHTML=点; }
它是从

我不理解
points.sort(函数(a,b){returna-b})部分。

您拥有的是可用于自定义排序的
Array.prototype.sort
。它根据从该函数返回的值执行排序,如下所示:

  • 如果比较函数(a,b)小于0,则将a排序到比b低的索引,即a排在第一位
  • 如果compareFunction(a,b)返回0,则保持a和b彼此不变,但根据所有不同的元素进行排序。注意:ECMAscript标准不保证这种行为,因此并非所有浏览器(例如,至少可以追溯到2003年的Mozilla版本)都遵守这一点
  • 如果比较函数(a,b)大于0,则将b排序为比a低的索引
因此,您只需返回两个数字a和b之间的差,这将返回排序比较功能所需的值(即,如果a
+ve-->如果a>b
0-->如果a==b
),则返回的值正好是可用于自定义排序的
数组.prototype.sort
的值。它根据从该函数返回的值执行排序,如下所示:

  • 如果比较函数(a,b)小于0,则将a排序到比b低的索引,即a排在第一位
  • 如果compareFunction(a,b)返回0,则保持a和b彼此不变,但根据所有不同的元素进行排序。注意:ECMAscript标准不保证这种行为,因此并非所有浏览器(例如,至少可以追溯到2003年的Mozilla版本)都遵守这一点
  • 如果比较函数(a,b)大于0,则将b排序为比a低的索引

因此,您只是返回两个数字a和b之间的差值,这将返回排序比较函数所需的值(即,如果a
+ve-->如果a>b
0-->如果a==b
)。

当您将回调函数与
sort
方法一起使用时,它决定如何比较数组中的两个项目

如果值相等,则回调函数应返回0。如果第一个参数在第二个参数之前结束,则回调函数应返回负值,否则返回正值

下面是一个具有相同结果的更具描述性的实现:

points.sort(function(a,b){
  if (a == b) {
    return 0;
  } else if (a < b) {
    return -1;
  } else {
    return 1;
  }
});
function(a, b) {
    if (a > b) return 1;
    else if (a < b) return -1;
    else return 0;
}
points.sort(函数a、b){
如果(a==b){
返回0;
}否则如果(a
当您使用带有
sort
方法的回调函数时,它确定如何比较数组中的两个项

如果值相等,则回调函数应返回0。如果第一个参数在第二个参数之前结束,则回调函数应返回负值,否则返回正值

下面是一个具有相同结果的更具描述性的实现:

points.sort(function(a,b){
  if (a == b) {
    return 0;
  } else if (a < b) {
    return -1;
  } else {
    return 1;
  }
});
function(a, b) {
    if (a > b) return 1;
    else if (a < b) return -1;
    else return 0;
}
points.sort(函数a、b){
如果(a==b){
返回0;
}否则如果(a
排序函数将比较器函数作为其参数。比较器功能的工作原理如下:

  • 它比较两个值(a和b)
  • 如果a>b,则返回正的值
  • 如果a=b,则返回0
  • 如果a
a-b
履行本合同


例如:如果
a=40
b=100
,则
a-b=-60
。因此,
a

排序函数将比较器函数作为其参数。比较器功能的工作原理如下:

  • 它比较两个值(a和b)
  • 如果a>b,则返回正的值
  • 如果a=b,则返回0
  • 如果a
a-b
履行本合同


例如:如果
a=40
b=100
,则
a-b=-60
。因此,
a
.sort()
允许您传递一个函数来定义数组的排序方式。目标是返回正数(>=0)或负数(
.sort()
允许您传递一个函数来定义数组的排序方式。目标是返回正数(>=0)或负数(排序函数的工作原理是查看比较器函数返回的值是负值还是正值。基本上,如果是正值,它交换数字。如果是负值或零,它将按该顺序保留数字。它将继续遍历数组,直到所有对返回非正值

在这种情况下:

  • 40-100=-60,所以不要管这两个。数组是[40100,1,5,25,10]
  • 100-1=99所以交换。数组是[40,1100,5,25,10]
  • 100-5=95所以交换[40,1,5100,25,10]
  • 100-25=75所以交换[40,1,5,25100,10]
  • 100-10=90所以交换[40,1,5,25,10100]
  • 重新开始.40-1=39,交换[1,40,5,25,10100]
  • 以此类推……这是相当低效的,所以很可能在引擎盖下,有更高效的事情正在发生,但为了预测你的产出,这就足够了

    您可以这样编写排序函数,得到相同的结果:

    points.sort(function(a,b){
      if (a == b) {
        return 0;
      } else if (a < b) {
        return -1;
      } else {
        return 1;
      }
    });
    
    function(a, b) {
        if (a > b) return 1;
        else if (a < b) return -1;
        else return 0;
    }
    
    功能(a、b){
    如果(a>b)返回1;
    否则如果(a
    排序函数通过查看比较器函数返回的值是负数还是正数来工作。基本上,如果是正数,它交换数字。如果是负数或零,它将按顺序保留数字。它将继续遍历数组,直到所有对返回非正数

    在这种情况下: