JavaScript-数字是否按顺序排列

时间:2020-02-13 17:53:08

标签: javascript

我是最近的编程训练营学生,我星期五毕业。我在寻找自己的第一个职业机会时,我一直在回顾一些早期的技巧,这些技巧可以帮助我们提高解决问题的能力,我不得不说我对其中的一些感到沮丧。我已经针对这些问题编写了测试,并使用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次通过(11ms) 1个失败

1)已订购 如果numbers数组按升序返回,则返回true:

  AssertionError: expected false to equal true
  + expected - actual

  -false
  +true 

2 个答案:

答案 0 :(得分:1)

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

如果值顺序不正确,请返回IDisposable

最后返回false

true

答案 1 :(得分:1)

我会这样:

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

  let sorted = nums.concat().sort((a, b) => a-b);
  let isSorted = true;
  for(let i in sorted)
    if(sorted[i] !== nums[i] && isSorted) isSorted = false;
  return isSorted;
}

只需复制数组并使用Array.sort()进行排序,然后将其与原始数组进行比较。

相关问题