* fix: remove isHidden flag from frontmatter * fix: add isUpcomingChange Co-authored-by: Ahmad Abdolsaheb <ahmad.abdolsaheb@gmail.com> * feat: hide blocks not challenges Co-authored-by: Ahmad Abdolsaheb <ahmad.abdolsaheb@gmail.com> Co-authored-by: Ahmad Abdolsaheb <ahmad.abdolsaheb@gmail.com>
2.8 KiB
2.8 KiB
id, title, challengeType, forumTopicId
id | title | challengeType | forumTopicId |
---|---|---|---|
587d7b86367417b2b2512b3b | Catch Off By One Errors When Using Indexing | 1 | 301189 |
Description
undefined
.
When you use string or array methods that take index ranges as arguments, it helps to read the documentation and understand if they are inclusive (the item at the given index is part of what's returned) or not. Here are some examples of off by one errors:
let alphabet = "abcdefghijklmnopqrstuvwxyz";
let len = alphabet.length;
for (let i = 0; i <= len; i++) {
// loops one too many times at the end
console.log(alphabet[i]);
}
for (let j = 1; j < len; j++) {
// loops one too few times and misses the first character at index 0
console.log(alphabet[j]);
}
for (let k = 0; k < len; k++) {
// Goldilocks approves - this is just right
console.log(alphabet[k]);
}
Instructions
Tests
tests:
- text: Your code should set the initial condition of the loop so it starts at the first index.
testString: assert(code.match(/i\s*?=\s*?0\s*?;/g).length == 1);
- text: Your code should fix the initial condition of the loop so that the index starts at 0.
testString: assert(!code.match(/i\s?=\s*?1\s*?;/g));
- text: Your code should set the terminal condition of the loop so it stops at the last index.
testString: assert(code.match(/i\s*?<\s*?len\s*?;/g).length == 1);
- text: Your code should fix the terminal condition of the loop so that it stops at 1 before the length.
testString: assert(!code.match(/i\s*?<=\s*?len;/g));
Challenge Seed
function countToFive() {
let firstFive = "12345";
let len = firstFive.length;
// Only change code below this line
for (let i = 1; i <= len; i++) {
// Only change code above this line
console.log(firstFive[i]);
}
}
countToFive();
Solution
function countToFive() {
let firstFive = "12345";
let len = firstFive.length;
// Only change code below this line
for (let i = 0; i < len; i++) {
// Only change code above this line
console.log(firstFive[i]);
}
}
countToFive();