.sort()方法不起作用

时间:2017-01-05 06:53:51

标签: javascript arrays

function isSorted(set) {
    if(set == set.sort()) {
        return true;
    } else {
        return false;
    }
}

这个函数应该检查数组是否正确排序,但无论如何,它仍然返回true。

3 个答案:

答案 0 :(得分:0)

来自MDN: sort()方法对数组中的元素进行排序并返回数组。

在调用set.sort()之后,set本身已经排序,因此set将始终等于set.sort()。

参考: http://www.myCo.com

答案 1 :(得分:0)

正如评论中所指出的,==通过引用进行比较,因此仍然引用相同的数组。因此条件总是true

使用以下方法确保数组是否已排序。找到方法表单here

/*
 * check the array is sorted
 * return: if positive (ascending) ->  1
 *         if negative (descending) -> -1
 *         not sorted  ->  0
 */
Array.prototype.isSorted = function() {
  return (function(direction) {
    return this.reduce(function(prev, next, i, arr) {
      if (direction === undefined)
        return (direction = prev <= next ? 1 : -1) || true;
      else
        return (direction + 1 ?
          (arr[i-1] <= next) : 
          (arr[i-1] >  next));
    }) ? Number(direction) : false;
  }).call(this);
}

var arr = [3,2,1,0];
arr.isSorted();

或者您可以使用上面的代码

创建这样的类似函数
/*
 * check the array is sorted
 * return: if positive (ascending) ->  1
 *         if negative (descending) -> -1
 *         not sorted  ->  0
 */
function isSorted(myArray) {
  return (function(direction) {
    return myArray.reduce(function(prev, next, i, arr) {
      if (direction === undefined)
        return (direction = prev <= next ? 1 : -1) || true;
      else
        return (direction + 1 ?
          (arr[i-1] <= next) : 
          (arr[i-1] >  next));
    }) ? Number(direction) : false;
  }).call(myArray);
}

var arr = [3,2,1,0];
isSorted(arr);

答案 2 :(得分:0)

如果对数组进行排序,我建议使用另一种方法来检查。您可以使用compareFunction所述的Array#sort,并将其用作检查,以Array#every

排序

例如,如果您有数字和 compareFunction ,如

var greaterOrEqual = function (a, b ) { return a - b; }

您可以使用该函数对数组进行排序,例如

array.sort(greaterOrEqual);

您可以使用以下模式检查每个元素

var isSorted = function (compareFunction) {
        return function (a, i, aa) {
            return !(compareFunction(aa[i - 1], a) > 0);
        };
    };

然后将其与数组一起使用,例如

var isSorted = array.every(isSorted(greaterOrEqual));

一个工作示例

&#13;
&#13;
var greaterOrEqual = function (a, b ) { return a - b; },
    isSorted = function (compareFunction) {
        return function (a, i, aa) {
            return !(compareFunction(aa[i - 1], a) > 0);
        };
    };

console.log([42].every(isSorted(greaterOrEqual)));            // true
console.log([42, 42].every(isSorted(greaterOrEqual)));        // true
console.log([1, 2, 3, 4, 5].every(isSorted(greaterOrEqual))); // true
console.log([1, 2, 5, 4, 3].every(isSorted(greaterOrEqual))); // false
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
&#13;
&#13;