我知道怎么做(就简单的实施而言),但我想要一种方法来做到这一点"最有效率"和" min。代码量" (对于最小的js库)没有任何其他依赖。
预期的行为和细节(签署可选):
function isSorted(array, sign) {
// code
}
console.log(isSorted([1,2,2,4]));
// true: default behaviour (non-decreasing or increasing; sign : '>=')
console.log(isSorted([4,3,2,1], '<'));
// true : strictly decreasing
console.log(isSorted([4,3,3,1], '<='));
// true : decreasing
提前致谢。
答案 0 :(得分:3)
如果返回false
,您可以将对象用于比较回调,将Array#every
用于短路。
如果向
thisArg
提供了every
参数,则会在调用时将其传递给callback
,以用作其this
值。否则,将传递值undefined
以用作其this
值。this
最终可观察到的callback
值是根据确定函数所见的this
的通常规则确定的。
function isSorted(array, sign) {
var compare = {
'<': function (a, b) { return a < b; },
'>': function (a, b) { return a > b; },
'<=': function (a, b) { return a <= b; },
'>=': function (a, b) { return a >= b; },
};
return array.every(function (a, i, aa) {
return !i || this(a, aa[i - 1]);
}, compare[sign] || compare['>=']);
}
console.log(isSorted([1, 2, 2, 4])); // true default behaviour (non-decreasing or increasing; sign : '>=')
console.log(isSorted([4, 3, 2, 1], '<')); // true strictly decreasing
console.log(isSorted([4, 3, 3, 1], '<=')); // true decreasing
console.log(isSorted([1, 2, 42, 2, 4])); // false
console.log(isSorted([4, 3, 42, 2, 1], '<')); // false
console.log(isSorted([4, 3, 42, 3, 1], '<=')); // false