我需要遍历数组的值并告诉数组值是升序,降序还是两者都不是。这就是我目前所拥有的,但我无法弄清楚我做错了什么?
我已经看到了一种不同的方法来解决这个问题,但我确信我正朝着正确的方向前进,因为我正在学习,我想继续追求我目前的逻辑。谢谢!
function ascDscArray(array) {
for (var i=1; i < array.length-1; i++) {
if (array[i-1] < array[i]) return "yes, ascending";
if (array[i-1] > array[i]) return "yes, descending";
else return "no";
}
}
注意:以下是我尝试使用[15, 7, 3, -8]
和[4, 2, 30]
进行测试的两个示例数组。
答案 0 :(得分:0)
您可以提前检查两个元素并选择比较函数并使用Array#every
检查所有元素。如果前一个元素和实际元素与预期的顺序不匹配,则允许使用短路。
然后返回订单类型或消息,表明数组未被订购。
function check(array) {
var direction = array[0] < array[1]
? { type: 'asc', fn: (a, b) => a < b }
: { type: 'desc', fn: (a, b) => a > b };
return array.every((v, i, a) => !i || direction.fn(a[i - 1], v))
? direction.type
: 'no';
}
console.log([[15, 7, 3, -8], [4, 2, 30], [1, 2, 3]].map(check));
&#13;
一个版本,它使用给定的代码并将第一个元素与所有后续元素进行比较。为了存储方向,使用两个变量并在条件下更新。
稍后检查两个变量是否为true
,然后返回'no'
或方向。
缺点:它迭代所有元素
function ascDscArray(array) {
var asc = false, desc = false;
for (var i = 1; i < array.length; i++) {
if (array[0] < array[i]) {
asc = true;
}
if (array[0] > array[i]) {
desc = true;
}
}
if (asc && desc) return 'no';
return asc ? 'asc' : 'desc';
}
console.log([[15, 7, 3, -8], [4, 2, 30], [1, 2, 3]].map(ascDscArray));
&#13;