[英]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.