JavaScript - 数字是否有序 Kata

标签 javascript

我是最近的编码训练营学生,我周五毕业。虽然我正在寻找我的第一个职业机会,但我一直在回顾我们为培养解决问题的技能而获得的一些早期 kata,我不得不说我被其中的一些难住了。我已经为这些问题编写了测试,并使用 TDD 来尝试解决它们。语言是Javascript。

任何人都可以用这个为我指出正确的方向。我已经写了 4 次测试,它通过了 4 次中的 3 次,我无法让它通过第 3 次测试,我不知道还能尝试什么。

卡塔说明:
areOrdered 函数应该将一个数字数组作为输入。
如果所有数字都按升序排列,它应该返回 true,否则返回 false。
空数组应返回 false。

我的测试:

const areOrdered = require("../katas/are-ordered");
const { expect } = require("chai");

describe.only("areOrdered", () => {
  it("returns a boolean", () => {
    const nums = [];
    const actualResults = areOrdered(nums);
    const expectedResults = false;
    expect(actualResults).to.equal(expectedResults);
  });

  it("returns false if passed an empty array", () => {
    const nums = [];
    const actualResults = areOrdered(nums);
    const expectedResults = false;
    expect(actualResults).to.equal(expectedResults);
  });

  it("returns true if the numbers array is in ascending order", () => {
    const nums = [1, 2, 3];
    const actualResults = areOrdered(nums);
    const expectedResults = true;
    expect(actualResults).to.equal(expectedResults);
  });
  it("returns false if the numbers array is not in ascending order", () => {
    const nums = [3, 1, 0, 2];
    const actualResults = areOrdered(nums);
    const expectedResults = false;
    expect(actualResults).to.equal(expectedResults);
  });
});

我的解决方案:
function areOrdered(nums) {
  if (nums.length === 0) {
    return false;
  }

  for (let i = 0; i < nums.length; i++) {
    if (!nums[i] < nums[i] + 1) {
      return false;
    } else if (nums[i] < nums[i] + 1) {
      return true;
    }
  }
}

结果:

有序
✓ returns a boolean
✓ returns false if passed an empty array
1) returns true if the numbers array is in ascending order
✓ returns false if the numbers array is not in ascending order

3 次通过(11 毫秒)
1 次失败

1) 已订购
如果 numbers 数组按升序排列,则返回 true:
  AssertionError: expected false to equal true
  + expected - actual

  -false
  +true 

最佳答案

您可以从第二个项目迭代并检查之前的项目和实际项目。

返回 false如果值不按顺序排列。

最后返回 true .

function areOrdered(nums) {
    if (nums.length === 0) return false;

    for (let i = 1; i < nums.length; i++) {
        if (nums[i - 1] >= nums[i]) return false;
    }
    return true;
}

console.log(areOrdered([]));           // false
console.log(areOrdered([1, 2, 3]));    //  true
console.log(areOrdered([3, 1, 0, 2])); // false

关于JavaScript - 数字是否有序 Kata,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60213832/

相关文章:

javascript - 更改拖动对象并在放置后恢复它

javascript - 日志中的 ValidationError 项

javascript - 在 React 中使用 onFocus/onClick 触发输入字段中的函数

javascript - 干净地获取新创建资源的 ID

c# - 根据数据库表定义自动生成代码?

javascript - 原始 javascript 日期到 VB.net 日期时间

javascript - 支持所有浏览器的 SVG 旋转

Javascript 从事件处理程序获取对父对象/类的引用

javascript - 在 D3.js 中添加列

javascript - 文档 keydown 绑定(bind)不适用于输入字段