javascript - 如何检查数组是否在javascript中增加?

标签 javascript arrays

我参加了一个 javascript 类(class),但遇到了一些问题。我们得到一个充满练习的网站,必须让所有的测试用例都变成绿色。

我们必须检查数组是否在递增,如果是则返回 true。如果下一个值与前一个值相同,则函数也必须返回 true。由于某种原因,我所有的测试用例都返回 false?如果我删除 else 只有一个测试用例是错误的(这个:[0,1,2,3,4,5,0])。 Here are the test cases.

function isIncreasing(xs) {
    var result = false;
    if (xs.length == 1 || xs.length === 0) {
        return true;
    }
    for (var i = 0; i <= xs.length - 1; i++) {
        if (xs[i] == xs[i + 1] - 1 || xs[i] == xs[i + 1]) {
            result = true;
        }
        else return false;
    }
    return result;
}

最佳答案

使用调试器遍历您的代码,停在感兴趣的行并检查值。您应该能够尽快找到问题所在。

如果你想使用for循环,你可以简化你的代码,省略0和1的特殊大小写,同时固定循环条件的顶部:

function isIncreasing(xs) {
  var prev, cur;

  for (var i = 0; i < xs.length; i++) {
    cur = xs[i];
    if (i && cur !== prev && cur !== prev + 1) return false;
    prev = cur;
  }

  return true;
}

如果允许使用 ES5 数组方法,则可以使用 every:

[1, 2, 3].every(function(elt, idx, arr) { 
  var prev = arr[idx - 1];
  return !idx || elt === prev || elt === prev + 1;
})

如果你想让你的代码更具语义和可读性,请定义一个命名良好的函数:

function sameOrGreater(elt, idx, arr) { 
  var prev = arr[idx - 1];
  return !idx || elt === prev || elt === prev + 1;
}

[1, 2, 3].every(sameOrGreater)

为了继续这个因式分解,我们可以分离出解决方案的两个方面。第一个是查看一个值是否与另一个值相同或大于另一个值。第二种是在数组中获取成对的相邻元素。换句话说,我们希望能够将解决方案写成

pairs(xs).every(sameOrGreater)

sameOrGreater 很简单:

function sameOrGreater(x, y) { return x === y || x === y - 1; }

pairs可以这样写:

function pairs(array) {
  return array.slice(1).map(function(elt, idx, arr) {
    return [array[idx], elt];
  });
}

> pairs([1, 2, 3])
< [[1, 2], [2, 3]]

您可能更喜欢使用生成器编写:

function* pairs(array) {
  let prev;
  for (const x of array) {
    yield [prev, x];
    prev = x;
  }
}

或者,我们可以编写一个 map 版本,它接受一个函数,并向其馈送对,如下所示:

function mapPairs(xs, fn) {
  var result = [];
  for (var i = 1; i < xs.length); i++) {
    result.push(fn(x[i - 1], x[i]));
  }
  return result;
}

现在我们可以把整个问题写成

mapPairs(xs, sameOrGreater).every(Boolean)

关于javascript - 如何检查数组是否在javascript中增加?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41668213/

相关文章:

javascript - 如何制作 .map?

javascript - 匹配 JavaScript 文件,但不包括 mocha 测试文件

java - 如何使图表显示数组元素

javascript - 数组不显示值

没有多个条目的javascript排序

javascript - 使用哪个正则表达式将字符串中的字体列表转换为数组?

javascript - 如何从 geogebra 脚本调用 javascript 函数?

javascript - select2 获取下拉选项数组列表

javascript - 在球体表面堆积不规则圆

python - reshape 3D 数组中的一组数组