簡體   English   中英

JavaScript - 數字是有序的 Kata

[英]JavaScript - Are numbers ordered Kata

我是最近參加編碼訓練營的學生,我於周五畢業。 雖然我正在尋找我的第一個職業機會,但我一直在回顧一些早期的 katas,我們被賦予了發展我們解決問題的能力,我不得不說我被其中的一些難住了。 我已經為這些問題編寫了測試,並使用 TDD 來嘗試解決它們。 語言是Javascript。

任何人都可以指出我正確的方向。 我已經寫了 4 個測試,它通過了 4 個中的 3 個,我無法讓它通過第 3 個測試,我不知道還能嘗試什么。

Kata 說明: 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 數組按升序排列,則 areOrdered 返回 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

我會這樣做:

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() 排序,然后將其與原始數組進行比較。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM