检查数组值是升序还是降序

时间:2018-04-12 20:07:57

标签: javascript arrays loops sorting for-loop

我需要遍历数组的值并告诉数组值是升序,降序还是两者都不是。这就是我目前所拥有的,但我无法弄清楚我做错了什么?

我已经看到了一种不同的方法来解决这个问题,但我确信我正朝着正确的方向前进,因为我正在学习,我想继续追求我目前的逻辑。谢谢!

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]进行测试的两个示例数组。

1 个答案:

答案 0 :(得分:0)

您可以提前检查两个元素并选择比较函数并使用Array#every检查所有元素。如果前一个元素和实际元素与预期的顺序不匹配,则允许使用短路。

然后返回订单类型或消息,表明数组未被订购。

&#13;
&#13;
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;
&#13;
&#13;

一个版本,它使用给定的代码并将第一个元素与所有后续元素进行比较。为了存储方向,使用两个变量并在条件下更新。

稍后检查两个变量是否为true,然后返回'no'或方向。

缺点:它迭代所有元素

&#13;
&#13;
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;
&#13;
&#13;