检查数组是否正在增长并打印缺少的元素

时间:2016-02-23 20:53:04

标签: javascript arrays loops iteration

var growing = function (array) {
    for (var i = 0; i < array.length; i++) {
        if (array[i] > array[i + 1]) {
            return false;
        } else {
            return true;
        }
    }
    function missing(array) {
        for (var i = 0; i < array.length - 1; i++) {
            if (array[i + 1] !== array[i] + 1) {
                return array[i] + 1;
            }
        }
    }
};

我分配了两个任务,我需要你的帮助。首先在“增长”功能中,我必须检查阵列是否在增长。例如,对于数组[1,2,3,4,5,6,7],它应返回true,但[1,2,10,4,5,6,7]为false。我对这个循环完全没有想法,我怎样才能升级循环?其次,在'missing'函数中,我必须遍历整个数组并检查它是否在迭代,我的意思是如果数组是这样的:[1, 2, 3, 5,]它将返回4,如果数组迭代正常而没有“跳”它应该返回null。当我尝试添加'else'循环时条件返回null;它只是打破了我的整个循环,它为每个数组返回null。怎么了?

2 个答案:

答案 0 :(得分:0)

你几乎就在那里,见代码中的评论:

var growing = function (array) {
    for (var i = 0; i < array.length; i++) {
        if (array[i] > array[i + 1]) {
            return false; // return only when it is not growing
        }
    }
    // if not returned in loop, then array is ascending
    return true;
};

// define function outside of growing function
function missing(array) {
    for (var i = 0; i < array.length - 1; i++) {
        if (array[i + 1] !== array[i] + 1) {
            return array[i] + 1;
        }
    }
}

console.log(growing([1,2,3,4,5,6,7])); // true
console.log(growing([1,2,10,4,5,6,7])); // false
console.log(missing([1,2,3,4,5,6,7])); // undefined
console.log(missing([1, 2, 3, 5,])); // 4

答案 1 :(得分:0)

对于第一部分,我建议使用Array#every()

&#13;
&#13;
function isGrowing(array) {
    return array.every(function (a, i, aa) {
        return !i || aa[i - 1] + 1 === a;
    });
}

document.write(isGrowing([1, 2, 3, 4, 5, 6, 7]) + '<br>');
document.write(isGrowing([1, 2, 10, 4, 5, 6, 7]) + '<br>');
document.write(isGrowing([1, 2, 3, 5, ]) + '<br>');
&#13;
&#13;
&#13;