Javascript 我使用sort()错误吗?

Javascript 我使用sort()错误吗?,javascript,Javascript,我在做一个小的编码挑战,就是写一个函数,如果arr参数是一个数字数组,按升序排序,它将返回true。我似乎无法理解这一点,但我的代码,无论发生什么,总是返回true function inAscOrder(arr) { return arr.sort() === arr; } 您无需对数组进行排序即可查看它是否已排序。您只需要检查它是否已排序 static boolean arraySortedOrNot(int arr[], int n) { // Array has one

我在做一个小的编码挑战,就是写一个函数,如果arr参数是一个数字数组,按升序排序,它将返回true。我似乎无法理解这一点,但我的代码,无论发生什么,总是返回true

function inAscOrder(arr) {
  return arr.sort() === arr;
}

您无需对数组进行排序即可查看它是否已排序。您只需要检查它是否已排序

static boolean arraySortedOrNot(int arr[], int n)
{

    // Array has one or no element
    if (n == 0 || n == 1)
        return true;

    for (int i = 1; i < n; i++)    
        // Unsorted pair found
        if (arr[i-1] > arr[i])
            return false;

    // No unsorted pair found
    return true;
}
静态布尔数组排序器(int-arr[],int-n)
{
//数组有一个或没有元素
如果(n==0 | | n==1)
返回true;
对于(int i=1;iarr[i])
返回false;
//未找到未排序的对
返回true;
}
参考链接:

由于数组是一种可变的数据类型,因此当您对其调用排序方法时,
arr
将被修改

因此,
arr.sort()
将修改您的数组,而不仅仅是返回一个已排序的数组。这就是为什么当你再次检查它是否等于
arr
,它将是相同的排序数组


为了克服这个问题,我建议您将
arr
复制到另一个数组中,并对其进行排序和测试。

正如其他人所指出的,您的版本的一个主要问题是它使用了变异的
排序。虽然您可以通过插入
切片(0)
或类似的方法来修复此问题,以克隆数组,然后使用索引相等性测试仪编写索引,但如果每个后续条目都比前一个条目大,则简单地进行测试要容易得多

也许最优雅的方法是通过递归。这里有一个例子:

const inAscOrder = (a) => a.length < 2 || (a[0] < a[1] && inAscOrder(a.slice(1)))
const-inAscOrder=(a)=>a.length<2 | |(a[0]
由于Javascript的递归深度限制,这对于较大的数组可能不可行。但同样事情的迭代版本相当简单:

const inAscOrder = (a) => {
  if (a.length < 2) {return true}
  for (let i = 1; i < a.length; i++) {
    if (a[i -1] > a[i]) {return false}
  }
  return true
}
const-inAscOrder=(a)=>{
如果(a.length<2){return true}
for(设i=1;ia[i]){return false}
}
返回真值
}

sort
对数组进行排序,并返回数组本身,而不是新数组。因此,是的,此函数将始终返回
true
。但是,即使它没有对数组进行适当的排序,也不能像那样比较数组。它只会检查引用是否相同。查看如何比较数组。Felix所说的都是正确的,但我猜您练习的目的不是对数组进行排序并检查它是否与原始数组等效。我想目标是通过实际分析数组的内容来检查数组是否已排序。