function isSorted(set) {
if(set == set.sort()) {
return true;
} else {
return false;
}
}
这个函数应该检查数组是否正确排序,但无论如何,它仍然返回true。
答案 0 :(得分:0)
来自MDN: sort()方法对数组中的元素进行排序并返回数组。
在调用set.sort()之后,set本身已经排序,因此set将始终等于set.sort()。
答案 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));
一个工作示例
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;