使用JavaScript中的sort方法对数组进行排序

8

我写了这段代码,但它没有起作用。它显示了未排序的数组和按钮,但当我点击按钮时,什么也不发生。 我是javascript的新手。到目前为止,我知道我们可以使用javascript的onclick方法调用函数。我们可以像在c或c++中编写函数一样编写函数。我认为我在这里所做的就是这样,但它没有显示已排序的数组。

var myarray = [4, 6, 2, 1, 9, ];
document.getElementById("demo").innerHTML = myarray;

function sort(myarray) {
  var count = array.length - 1,
    swap,
    j,
    i;

  for (j = 0; j < count; j++) {
    for (i = 0; i < count; i++) {
      if (array[i] > myarray[i + 1]) {
        swap = myarray[i + 1];
        myarray[i + 1] = myarray[i];
        myarray[i] = swap;
      }
    }
    document.write(myarray);
  }
}
<p>Click the button to sort the array.</p>
<button onclick="sort()">Try it</button>
<p id="demo"></p>


1
@mmm它附加到按钮点击事件。另外@Nancy,您应该检查您的控制台。有一个错误array未定义 - Rajesh
检查你的函数,然后检查控制台,你的代码中有明显的错误(提示:数组 vs myarray)。停止使用 document.write。 - dfsq
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort - Juho Vepsäläinen
5个回答

3
主要问题是,要决定是否设置参数。如果不设置,则对所有操作使用myarray。如果您决定使用参数,则只使用参数变量。

var myarray = [4, 6, 2, 1, 9, ];
document.getElementById("demo").innerHTML = myarray;

function sort() {                                        // no need for a parameter
    var count = myarray.length - 1,                      // change it to myarray
        swap,
        j, i;

    for (j = 0; j < count; j++) {
        for (i = 0; i < count; i++) {
            if (myarray[i] > myarray[i + 1]) {           // access only myarray
                swap = myarray[i + 1];
                myarray[i + 1] = myarray[i];
                myarray[i] = swap;
            }
        }
    }
    document.getElementById("demo").innerHTML = myarray; // return the sorted array
}
<p>Click the button to sort the array.</p>
<button onclick="sort()">Try it</button>
<p id="demo"></p>


2

var myarray = [4, 6, 2, 1, 9];
document.getElementById("demo").innerHTML = myarray;

function sort(myarray) {
  var count = myarray.length - 1,
    swap,
    j,
    i;

  for (j = 0; j < count; j++) {
    for (i = 0; i < count; i++) {
      if (myarray[i] > myarray[i + 1]) {
        swap = myarray[i + 1];
        myarray[i + 1] = myarray[i];
        myarray[i] = swap;
      }
    }       
  }
 document.getElementById("result").innerHTML = myarray;
}
<p>Click the button to sort the array.</p>
<button onclick="sort(myarray)">Try it</button>
<p id="demo"></p>
<p id="result"></p>


1
首先,你的数组定义末尾有一个多余的逗号。 其次,在 if 语句中使用了 array 而不是 myarray。
一旦排序完成,你需要添加以下语句:
document.getElementById("demo").innerHTML = myarray;

1
使用带有额外逗号的数组是可以的,这不会导致任何错误。 - Rajesh

1
我发现你的代码存在两个问题。第一个问题是在两行中你写成了array而不是myarray
var count = array.length - 1,

并且

if (array[i] > myarray[i + 1]) {

第二个问题是在调用函数时没有将数组作为参数传递,因此:
<button onclick="sort()">Try it</button>

should be:

<button onclick="sort(myarray)">Try it</button>

1
您正在使用一个未定义或未知于函数的变量“array”。此外,在按钮单击时,您没有向排序函数传递任何参数。这就是您出现错误的原因。
var myarray = [4, 6, 2, 1, 9, ];

function sort(myarray) {
  var count = myarray.length - 1,
    swap,
    j,
    i;

  for (j = 0; j < count; j++) {
    for (i = 0; i < count; i++) {
      if (myarray[i] > myarray[i + 1]) {
        swap = myarray[i + 1];
        myarray[i + 1] = myarray[i];
        myarray[i] = swap;
      }
    }
    document.write(myarray);
  }
}

<p>Click the button to sort the array.</p>
<button onclick="sort(myarray)">Try it</button>
<p id="demo"></p>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接