fix(curriculum): fix challenges for russian language

This commit is contained in:
Valeriy S
2019-08-28 16:26:13 +03:00
committed by mrugesh
parent a17c3c44aa
commit 12f65a6742
1418 changed files with 39634 additions and 19395 deletions

View File

@@ -3,15 +3,18 @@ id: a77dbc43c33f39daa4429b4f
title: Boo who
isRequired: true
challengeType: 5
videoUrl: ''
localeTitle: 'Бу, кто'
forumTopicId: 16000
localeTitle: Бу, кто
---
## Description
<section id="description"> Проверьте, классифицировано ли значение как булевский примитив. Вернуть true или false. Булевы примитивы являются истинными и ложными. Не забудьте использовать <a href="http://forum.freecodecamp.org/t/how-to-get-help-when-you-are-stuck/19514" target="_blank">Read-Search-Ask,</a> если вы застряли. Попробуйте подключить программу. Напишите свой собственный код. </section>
<section id='description'>
Проверьте, классифицировано ли значение как булевский примитив. Вернуть true или false. Булевы примитивы являются истинными и ложными. Не забудьте использовать <a href="http://forum.freecodecamp.org/t/how-to-get-help-when-you-are-stuck/19514" target="_blank">Read-Search-Ask,</a> если вы застряли. Попробуйте подключить программу. Напишите свой собственный код.
</section>
## Instructions
<section id="instructions">
<section id='instructions'>
</section>
## Tests
@@ -19,26 +22,26 @@ localeTitle: 'Бу, кто'
```yml
tests:
- text: <code>booWho(true)</code> должен возвращать true.
testString: 'assert.strictEqual(booWho(true), true, "<code>booWho(true)</code> should return true.");'
- text: <code>booWho(false)</code> должен возвращать true.
testString: 'assert.strictEqual(booWho(false), true, "<code>booWho(false)</code> should return true.");'
- text: '<code>booWho([1, 2, 3])</code> должен возвращать false.'
testString: 'assert.strictEqual(booWho([1, 2, 3]), false, "<code>booWho([1, 2, 3])</code> should return false.");'
- text: '<code>booWho([].slice)</code> должен возвращать false.'
testString: 'assert.strictEqual(booWho([].slice), false, "<code>booWho([].slice)</code> should return false.");'
- text: '<code>booWho({ &quot;a&quot;: 1 })</code> должен возвращать false.'
testString: 'assert.strictEqual(booWho({ "a": 1 }), false, "<code>booWho({ "a": 1 })</code> should return false.");'
- text: <code>booWho(1)</code> должен возвращать false.
testString: 'assert.strictEqual(booWho(1), false, "<code>booWho(1)</code> should return false.");'
- text: <code>booWho(NaN)</code> должно возвращать false.
testString: 'assert.strictEqual(booWho(NaN), false, "<code>booWho(NaN)</code> should return false.");'
- text: ''
testString: 'assert.strictEqual(booWho("a"), false, "<code>booWho("a")</code> should return false.");'
- text: ''
testString: 'assert.strictEqual(booWho("true"), false, "<code>booWho("true")</code> should return false.");'
- text: <code>booWho(&quot;false&quot;)</code> должен возвращать false.
testString: 'assert.strictEqual(booWho("false"), false, "<code>booWho("false")</code> should return false.");'
- text: <code>booWho(true)</code> should return true.
testString: assert.strictEqual(booWho(true), true);
- text: <code>booWho(false)</code> should return true.
testString: assert.strictEqual(booWho(false), true);
- text: <code>booWho([1, 2, 3])</code> should return false.
testString: assert.strictEqual(booWho([1, 2, 3]), false);
- text: <code>booWho([].slice)</code> should return false.
testString: assert.strictEqual(booWho([].slice), false);
- text: '<code>booWho({ "a": 1 })</code> should return false.'
testString: 'assert.strictEqual(booWho({ "a": 1 }), false);'
- text: <code>booWho(1)</code> should return false.
testString: assert.strictEqual(booWho(1), false);
- text: <code>booWho(NaN)</code> should return false.
testString: assert.strictEqual(booWho(NaN), false);
- text: <code>booWho("a")</code> should return false.
testString: assert.strictEqual(booWho("a"), false);
- text: <code>booWho("true")</code> should return false.
testString: assert.strictEqual(booWho("true"), false);
- text: <code>booWho("false")</code> should return false.
testString: assert.strictEqual(booWho("false"), false);
```
@@ -61,14 +64,17 @@ booWho(null);
</div>
</section>
## Solution
<section id='solution'>
```js
// solution required
function booWho(bool) {
return typeof bool === "boolean";
}
booWho(null);
```
</section>

View File

@@ -3,15 +3,18 @@ id: a9bd25c716030ec90084d8a1
title: Chunky Monkey
isRequired: true
challengeType: 5
videoUrl: ''
forumTopicId: 16005
localeTitle: Короткая обезьяна
---
## Description
<section id="description"> Напишите функцию, которая разбивает массив (первый аргумент) на группы по длине <code>size</code> (второй аргумент) и возвращает их в виде двумерного массива. Не забудьте использовать <a href="http://forum.freecodecamp.org/t/how-to-get-help-when-you-are-stuck/19514" target="_blank">Read-Search-Ask,</a> если вы застряли. Напишите свой собственный код. </section>
<section id='description'>
Напишите функцию, которая разбивает массив (первый аргумент) на группы по длине <code>size</code> (второй аргумент) и возвращает их в виде двумерного массива. Не забудьте использовать <a href="http://forum.freecodecamp.org/t/how-to-get-help-when-you-are-stuck/19514" target="_blank">Read-Search-Ask,</a> если вы застряли. Напишите свой собственный код.
</section>
## Instructions
<section id="instructions">
<section id='instructions'>
</section>
## Tests
@@ -19,20 +22,20 @@ localeTitle: Короткая обезьяна
```yml
tests:
- text: '<code>chunkArrayInGroups([&quot;a&quot;, &quot;b&quot;, &quot;c&quot;, &quot;d&quot;], 2)</code> должны возвращать <code>[[&quot;a&quot;, &quot;b&quot;], [&quot;c&quot;, &quot;d&quot;]]</code> .'
testString: 'assert.deepEqual(chunkArrayInGroups(["a", "b", "c", "d"], 2), [["a", "b"], ["c", "d"]], "<code>chunkArrayInGroups(["a", "b", "c", "d"], 2)</code> should return <code>[["a", "b"], ["c", "d"]]</code>.");'
- text: '<code>chunkArrayInGroups([0, 1, 2, 3, 4, 5], 3)</code> должны возвращать <code>[[0, 1, 2], [3, 4, 5]]</code> .'
testString: 'assert.deepEqual(chunkArrayInGroups([0, 1, 2, 3, 4, 5], 3), [[0, 1, 2], [3, 4, 5]], "<code>chunkArrayInGroups([0, 1, 2, 3, 4, 5], 3)</code> should return <code>[[0, 1, 2], [3, 4, 5]]</code>.");'
- text: '<code>chunkArrayInGroups([0, 1, 2, 3, 4, 5], 2)</code> должны возвращать <code>[[0, 1], [2, 3], [4, 5]]</code> .'
testString: 'assert.deepEqual(chunkArrayInGroups([0, 1, 2, 3, 4, 5], 2), [[0, 1], [2, 3], [4, 5]], "<code>chunkArrayInGroups([0, 1, 2, 3, 4, 5], 2)</code> should return <code>[[0, 1], [2, 3], [4, 5]]</code>.");'
- text: '<code>chunkArrayInGroups([0, 1, 2, 3, 4, 5], 4)</code> должны возвращать <code>[[0, 1, 2, 3], [4, 5]]</code> .'
testString: 'assert.deepEqual(chunkArrayInGroups([0, 1, 2, 3, 4, 5], 4), [[0, 1, 2, 3], [4, 5]], "<code>chunkArrayInGroups([0, 1, 2, 3, 4, 5], 4)</code> should return <code>[[0, 1, 2, 3], [4, 5]]</code>.");'
- text: '<code>chunkArrayInGroups([0, 1, 2, 3, 4, 5, 6], 3)</code> должны возвращать <code>[[0, 1, 2], [3, 4, 5], [6]]</code> .'
testString: 'assert.deepEqual(chunkArrayInGroups([0, 1, 2, 3, 4, 5, 6], 3), [[0, 1, 2], [3, 4, 5], [6]], "<code>chunkArrayInGroups([0, 1, 2, 3, 4, 5, 6], 3)</code> should return <code>[[0, 1, 2], [3, 4, 5], [6]]</code>.");'
- text: '<code>chunkArrayInGroups([0, 1, 2, 3, 4, 5, 6, 7, 8], 4)</code> должны возвращать <code>[[0, 1, 2, 3], [4, 5, 6, 7], [8]]</code> .'
testString: 'assert.deepEqual(chunkArrayInGroups([0, 1, 2, 3, 4, 5, 6, 7, 8], 4), [[0, 1, 2, 3], [4, 5, 6, 7], [8]], "<code>chunkArrayInGroups([0, 1, 2, 3, 4, 5, 6, 7, 8], 4)</code> should return <code>[[0, 1, 2, 3], [4, 5, 6, 7], [8]]</code>.");'
- text: '<code>chunkArrayInGroups([0, 1, 2, 3, 4, 5, 6, 7, 8], 2)</code> должны возвращать <code>[[0, 1], [2, 3], [4, 5], [6, 7], [8]]</code> .'
testString: 'assert.deepEqual(chunkArrayInGroups([0, 1, 2, 3, 4, 5, 6, 7, 8], 2), [[0, 1], [2, 3], [4, 5], [6, 7], [8]], "<code>chunkArrayInGroups([0, 1, 2, 3, 4, 5, 6, 7, 8], 2)</code> should return <code>[[0, 1], [2, 3], [4, 5], [6, 7], [8]]</code>.");'
- text: <code>chunkArrayInGroups(["a", "b", "c", "d"], 2)</code> should return <code>[["a", "b"], ["c", "d"]]</code>.
testString: assert.deepEqual(chunkArrayInGroups(["a", "b", "c", "d"], 2), [["a", "b"], ["c", "d"]]);
- text: <code>chunkArrayInGroups([0, 1, 2, 3, 4, 5], 3)</code> should return <code>[[0, 1, 2], [3, 4, 5]]</code>.
testString: assert.deepEqual(chunkArrayInGroups([0, 1, 2, 3, 4, 5], 3), [[0, 1, 2], [3, 4, 5]]);
- text: <code>chunkArrayInGroups([0, 1, 2, 3, 4, 5], 2)</code> should return <code>[[0, 1], [2, 3], [4, 5]]</code>.
testString: assert.deepEqual(chunkArrayInGroups([0, 1, 2, 3, 4, 5], 2), [[0, 1], [2, 3], [4, 5]]);
- text: <code>chunkArrayInGroups([0, 1, 2, 3, 4, 5], 4)</code> should return <code>[[0, 1, 2, 3], [4, 5]]</code>.
testString: assert.deepEqual(chunkArrayInGroups([0, 1, 2, 3, 4, 5], 4), [[0, 1, 2, 3], [4, 5]]);
- text: <code>chunkArrayInGroups([0, 1, 2, 3, 4, 5, 6], 3)</code> should return <code>[[0, 1, 2], [3, 4, 5], [6]]</code>.
testString: assert.deepEqual(chunkArrayInGroups([0, 1, 2, 3, 4, 5, 6], 3), [[0, 1, 2], [3, 4, 5], [6]]);
- text: <code>chunkArrayInGroups([0, 1, 2, 3, 4, 5, 6, 7, 8], 4)</code> should return <code>[[0, 1, 2, 3], [4, 5, 6, 7], [8]]</code>.
testString: assert.deepEqual(chunkArrayInGroups([0, 1, 2, 3, 4, 5, 6, 7, 8], 4), [[0, 1, 2, 3], [4, 5, 6, 7], [8]]);
- text: <code>chunkArrayInGroups([0, 1, 2, 3, 4, 5, 6, 7, 8], 2)</code> should return <code>[[0, 1], [2, 3], [4, 5], [6, 7], [8]]</code>.
testString: assert.deepEqual(chunkArrayInGroups([0, 1, 2, 3, 4, 5, 6, 7, 8], 2), [[0, 1], [2, 3], [4, 5], [6, 7], [8]]);
```
@@ -55,14 +58,23 @@ chunkArrayInGroups(["a", "b", "c", "d"], 2);
</div>
</section>
## Solution
<section id='solution'>
```js
// solution required
function chunkArrayInGroups(arr, size) {
let out = [];
for (let i = 0; i < arr.length; i += size) {
out.push(arr.slice(i, i + size));
}
return out;
}
chunkArrayInGroups(["a", "b", "c", "d"], 2);
```
</section>

View File

@@ -3,15 +3,18 @@ id: acda2fb1324d9b0fa741e6b5
title: Confirm the Ending
isRequired: true
challengeType: 5
videoUrl: ''
forumTopicId: 16006
localeTitle: Подтвердить завершение
---
## Description
<section id="description"> Проверьте, заканчивается ли строка (первый аргумент, <code>str</code> ) заданной целевой строкой (второй аргумент, <code>target</code> ). Эта проблема <em>может</em> быть решена с помощью <code>.endsWith()</code> , который был введен в ES2015. Но для этой задачи мы хотели бы, чтобы вы использовали один из методов подстроки JavaScript. Не забудьте использовать <a href="http://forum.freecodecamp.org/t/how-to-get-help-when-you-are-stuck/19514" target="_blank">Read-Search-Ask,</a> если вы застряли. Напишите свой собственный код. </section>
<section id='description'>
Проверьте, заканчивается ли строка (первый аргумент, <code>str</code> ) заданной целевой строкой (второй аргумент, <code>target</code> ). Эта проблема <em>может</em> быть решена с помощью <code>.endsWith()</code> , который был введен в ES2015. Но для этой задачи мы хотели бы, чтобы вы использовали один из методов подстроки JavaScript. Не забудьте использовать <a href="http://forum.freecodecamp.org/t/how-to-get-help-when-you-are-stuck/19514" target="_blank">Read-Search-Ask,</a> если вы застряли. Напишите свой собственный код.
</section>
## Instructions
<section id="instructions">
<section id='instructions'>
</section>
## Tests
@@ -19,28 +22,28 @@ localeTitle: Подтвердить завершение
```yml
tests:
- text: '<code>confirmEnding(&quot;Bastian&quot;, &quot;n&quot;)</code> должен возвращать true.'
testString: 'assert(confirmEnding("Bastian", "n") === true, "<code>confirmEnding("Bastian", "n")</code> should return true.");'
- text: '<code>confirmEnding(&quot;Congratulation&quot;, &quot;on&quot;)</code> должно возвращать true.'
testString: 'assert(confirmEnding("Congratulation", "on") === true, "<code>confirmEnding("Congratulation", "on")</code> should return true.");'
- text: '<code>confirmEnding(&quot;Connor&quot;, &quot;n&quot;)</code> должен возвращать значение false.'
testString: 'assert(confirmEnding("Connor", "n") === false, "<code>confirmEnding("Connor", "n")</code> should return false.");'
- text: '<code>confirmEnding(&quot;Walking on water and developing software from a specification are easy if both are frozen&quot;, &quot;specification&quot;)</code> должны возвращать значение false.'
testString: 'assert(confirmEnding("Walking on water and developing software from a specification are easy if both are frozen", "specification") === false, "<code>confirmEnding("Walking on water and developing software from a specification are easy if both are frozen"&#44; "specification"&#41;</code> should return false.");'
- text: '<code>confirmEnding(&quot;He has to give me a new name&quot;, &quot;name&quot;)</code> должен возвращать true.'
testString: 'assert(confirmEnding("He has to give me a new name", "name") === true, "<code>confirmEnding("He has to give me a new name", "name")</code> should return true.");'
- text: '<code>confirmEnding(&quot;Open sesame&quot;, &quot;same&quot;)</code> должен возвращать true.'
testString: 'assert(confirmEnding("Open sesame", "same") === true, "<code>confirmEnding("Open sesame", "same")</code> should return true.");'
- text: '<code>confirmEnding(&quot;Open sesame&quot;, &quot;pen&quot;)</code> должен возвращать false.'
testString: 'assert(confirmEnding("Open sesame", "pen") === false, "<code>confirmEnding("Open sesame", "pen")</code> should return false.");'
- text: '<code>confirmEnding(&quot;Open sesame&quot;, &quot;game&quot;)</code> должен возвращать значение false.'
testString: 'assert(confirmEnding("Open sesame", "game") === false, "<code>confirmEnding("Open sesame", "game")</code> should return false.");'
- text: '<code>confirmEnding(&quot;If you want to save our world, you must hurry. We dont know how much longer we can withstand the nothing&quot;, &quot;mountain&quot;)</code> должны возвращать ложные.'
testString: 'assert(confirmEnding("If you want to save our world, you must hurry. We dont know how much longer we can withstand the nothing", "mountain") === false, "<code>confirmEnding("If you want to save our world, you must hurry. We dont know how much longer we can withstand the nothing", "mountain")</code> should return false.");'
- text: '<code>confirmEnding(&quot;Abstraction&quot;, &quot;action&quot;)</code> должно возвращать true.'
testString: 'assert(confirmEnding("Abstraction", "action") === true, "<code>confirmEnding("Abstraction", "action")</code> should return true.");'
- text: Не используйте встроенный метод <code>.endsWith()</code> чтобы решить проблему.
testString: 'assert(!(/\.endsWith\(.*?\)\s*?;?/.test(code)) && !(/\["endsWith"\]/.test(code)), "Do not use the built-in method <code>.endsWith()</code> to solve the challenge.");'
- text: <code>confirmEnding("Bastian", "n")</code> should return true.
testString: assert(confirmEnding("Bastian", "n") === true);
- text: <code>confirmEnding("Congratulation", "on")</code> should return true.
testString: assert(confirmEnding("Congratulation", "on") === true);
- text: <code>confirmEnding("Connor", "n")</code> should return false.
testString: assert(confirmEnding("Connor", "n") === false);
- text: <code>confirmEnding("Walking on water and developing software from a specification are easy if both are frozen"&#44; "specification"&#41;</code> should return false.
testString: assert(confirmEnding("Walking on water and developing software from a specification are easy if both are frozen", "specification") === false);
- text: <code>confirmEnding("He has to give me a new name", "name")</code> should return true.
testString: assert(confirmEnding("He has to give me a new name", "name") === true);
- text: <code>confirmEnding("Open sesame", "same")</code> should return true.
testString: assert(confirmEnding("Open sesame", "same") === true);
- text: <code>confirmEnding("Open sesame", "pen")</code> should return false.
testString: assert(confirmEnding("Open sesame", "pen") === false);
- text: <code>confirmEnding("Open sesame", "game")</code> should return false.
testString: assert(confirmEnding("Open sesame", "game") === false);
- text: <code>confirmEnding("If you want to save our world, you must hurry. We dont know how much longer we can withstand the nothing", "mountain")</code> should return false.
testString: assert(confirmEnding("If you want to save our world, you must hurry. We dont know how much longer we can withstand the nothing", "mountain") === false);
- text: <code>confirmEnding("Abstraction", "action")</code> should return true.
testString: assert(confirmEnding("Abstraction", "action") === true);
- text: Do not use the built-in method <code>.endsWith()</code> to solve the challenge.
testString: assert(!(/\.endsWith\(.*?\)\s*?;?/.test(code)) && !(/\['endsWith'\]/.test(code)));
```
@@ -64,14 +67,17 @@ confirmEnding("Bastian", "n");
</div>
</section>
## Solution
<section id='solution'>
```js
// solution required
function confirmEnding(str, target) {
return str.substring(str.length - target.length) === target;
}
confirmEnding("Bastian", "n");
```
</section>

View File

@@ -3,15 +3,18 @@ id: 56533eb9ac21ba0edf2244b3
title: Convert Celsius to Fahrenheit
challengeType: 1
isRequired: true
videoUrl: ''
forumTopicId: 16806
localeTitle: Преобразование Цельсия в Фаренгейт
---
## Description
<section id="description"> Алгоритм преобразования от Цельсия в Фаренгейт - это температура в градусах Цельсия <code>9/5</code> и плюс <code>32</code> . Вам дается переменная <code>celsius</code> представляющая температуру в градусах Цельсия. Используйте переменную <code>fahrenheit</code> уже определена, и назначьте ей температуру Фаренгейта, эквивалентную заданной температуре Цельсия. Используйте вышеупомянутый алгоритм, чтобы помочь преобразовать температуру Цельсия в Фаренгейт. Не беспокойтесь слишком много о функциях и заявлениях о возврате, поскольку они будут рассмотрены в будущих задачах. Пока что используйте только те операторы, которые вы уже узнали. </section>
<section id='description'>
Алгоритм преобразования от Цельсия в Фаренгейт - это температура в градусах Цельсия <code>9/5</code> и плюс <code>32</code> . Вам дается переменная <code>celsius</code> представляющая температуру в градусах Цельсия. Используйте переменную <code>fahrenheit</code> уже определена, и назначьте ей температуру Фаренгейта, эквивалентную заданной температуре Цельсия. Используйте вышеупомянутый алгоритм, чтобы помочь преобразовать температуру Цельсия в Фаренгейт. Не беспокойтесь слишком много о функциях и заявлениях о возврате, поскольку они будут рассмотрены в будущих задачах. Пока что используйте только те операторы, которые вы уже узнали.
</section>
## Instructions
<section id="instructions">
<section id='instructions'>
</section>
## Tests
@@ -19,18 +22,18 @@ localeTitle: Преобразование Цельсия в Фаренгейт
```yml
tests:
- text: <code>convertToF(0)</code> должен возвращать число
testString: 'assert(typeof convertToF(0) === "number", "<code>convertToF(0)</code> should return a number");'
- text: <code>convertToF(-30)</code> должен возвращать значение <code>-22</code>
testString: 'assert(convertToF(-30) === -22, "<code>convertToF(-30)</code> should return a value of <code>-22</code>");'
- text: <code>convertToF(-10)</code> должен возвращать значение <code>14</code>
testString: 'assert(convertToF(-10) === 14, "<code>convertToF(-10)</code> should return a value of <code>14</code>");'
- text: <code>convertToF(0)</code> должно возвращать значение <code>32</code>
testString: 'assert(convertToF(0) === 32, "<code>convertToF(0)</code> should return a value of <code>32</code>");'
- text: <code>convertToF(20)</code> должно возвращать значение <code>68</code>
testString: 'assert(convertToF(20) === 68, "<code>convertToF(20)</code> should return a value of <code>68</code>");'
- text: <code>convertToF(30)</code> должен вернуть значение <code>86</code>
testString: 'assert(convertToF(30) === 86, "<code>convertToF(30)</code> should return a value of <code>86</code>");'
- text: <code>convertToF(0)</code> should return a number
testString: assert(typeof convertToF(0) === 'number');
- text: <code>convertToF(-30)</code> should return a value of <code>-22</code>
testString: assert(convertToF(-30) === -22);
- text: <code>convertToF(-10)</code> should return a value of <code>14</code>
testString: assert(convertToF(-10) === 14);
- text: <code>convertToF(0)</code> should return a value of <code>32</code>
testString: assert(convertToF(0) === 32);
- text: <code>convertToF(20)</code> should return a value of <code>68</code>
testString: assert(convertToF(20) === 68);
- text: <code>convertToF(30)</code> should return a value of <code>86</code>
testString: assert(convertToF(30) === 86);
```
@@ -53,14 +56,19 @@ convertToF(30);
</div>
</section>
## Solution
<section id='solution'>
```js
// solution required
function convertToF(celsius) {
let fahrenheit = celsius * 9/5 + 32;
return fahrenheit;
}
convertToF(30);
```
</section>

View File

@@ -3,15 +3,18 @@ id: a302f7aae1aa3152a5b413bc
title: Factorialize a Number
isRequired: true
challengeType: 5
videoUrl: ''
forumTopicId: 16013
localeTitle: Факториализация номера
---
## Description
<section id="description"> Верните факториал предоставленного целого числа. Если целое число представлено буквой n, факториал является произведением всех положительных целых чисел, меньших или равных n. Факториалы часто представлены сокращенной нотой <code>n!</code> Например: <code>5! = 1 * 2 * 3 * 4 * 5 = 120</code> В функцию будут <code>5! = 1 * 2 * 3 * 4 * 5 = 120</code> только целые числа, большие или равные нулю. Не забудьте использовать <a href="http://forum.freecodecamp.org/t/how-to-get-help-when-you-are-stuck/19514" target="_blank">Read-Search-Ask,</a> если вы застряли. Напишите свой собственный код. </section>
<section id='description'>
Верните факториал предоставленного целого числа. Если целое число представлено буквой n, факториал является произведением всех положительных целых чисел, меньших или равных n. Факториалы часто представлены сокращенной нотой <code>n!</code> Например: <code>5! = 1 * 2 * 3 * 4 * 5 = 120</code> В функцию будут <code>5! = 1 * 2 * 3 * 4 * 5 = 120</code> только целые числа, большие или равные нулю. Не забудьте использовать <a href="http://forum.freecodecamp.org/t/how-to-get-help-when-you-are-stuck/19514" target="_blank">Read-Search-Ask,</a> если вы застряли. Напишите свой собственный код.
</section>
## Instructions
<section id="instructions">
<section id='instructions'>
</section>
## Tests
@@ -19,16 +22,16 @@ localeTitle: Факториализация номера
```yml
tests:
- text: <code>factorialize(5)</code> должен возвращать число.
testString: 'assert(typeof factorialize(5) === "number", "<code>factorialize(5)</code> should return a number.");'
- text: <code>factorialize(5)</code> должен вернуть 120.
testString: 'assert(factorialize(5) === 120, "<code>factorialize(5)</code> should return 120.");'
- text: <code>factorialize(10)</code> должен вернуть 3628800.
testString: 'assert(factorialize(10) === 3628800, "<code>factorialize(10)</code> should return 3628800.");'
- text: <code>factorialize(20)</code> должен возвращать 2432902008176640000.
testString: 'assert(factorialize(20) === 2432902008176640000, "<code>factorialize(20)</code> should return 2432902008176640000.");'
- text: <code>factorialize(0)</code> должен возвращать 1.
testString: 'assert(factorialize(0) === 1, "<code>factorialize(0)</code> should return 1.");'
- text: <code>factorialize(5)</code> should return a number.
testString: assert(typeof factorialize(5) === 'number');
- text: <code>factorialize(5)</code> should return 120.
testString: assert(factorialize(5) === 120);
- text: <code>factorialize(10)</code> should return 3628800.
testString: assert(factorialize(10) === 3628800);
- text: <code>factorialize(20)</code> should return 2432902008176640000.
testString: assert(factorialize(20) === 2432902008176640000);
- text: <code>factorialize(0)</code> should return 1.
testString: assert(factorialize(0) === 1);
```
@@ -50,14 +53,17 @@ factorialize(5);
</div>
</section>
## Solution
<section id='solution'>
```js
// solution required
function factorialize(num) {
return num < 1 ? 1 : num * factorialize(num - 1);
}
factorialize(5);
```
</section>

View File

@@ -3,15 +3,18 @@ id: adf08ec01beb4f99fc7a68f2
title: Falsy Bouncer
isRequired: true
challengeType: 5
videoUrl: ''
forumTopicId: 16014
localeTitle: Фальшивый вышибала
---
## Description
<section id="description"> Удалите все значения фальши из массива. Значения фальши в JavaScript - <code>false</code> , <code>null</code> , <code>0</code> , <code>&quot;&quot;</code> , <code>undefined</code> и <code>NaN</code> . Подсказка: попробуйте преобразовать каждое значение в логическое. Не забудьте использовать <a href="http://forum.freecodecamp.org/t/how-to-get-help-when-you-are-stuck/19514" target="_blank">Read-Search-Ask,</a> если вы застряли. Напишите свой собственный код. </section>
<section id='description'>
Удалите все значения фальши из массива. Значения фальши в JavaScript - <code>false</code> , <code>null</code> , <code>0</code> , <code>&quot;&quot;</code> , <code>undefined</code> и <code>NaN</code> . Подсказка: попробуйте преобразовать каждое значение в логическое. Не забудьте использовать <a href="http://forum.freecodecamp.org/t/how-to-get-help-when-you-are-stuck/19514" target="_blank">Read-Search-Ask,</a> если вы застряли. Напишите свой собственный код.
</section>
## Instructions
<section id="instructions">
<section id='instructions'>
</section>
## Tests
@@ -19,14 +22,14 @@ localeTitle: Фальшивый вышибала
```yml
tests:
- text: '<code>bouncer([7, &quot;ate&quot;, &quot;&quot;, false, 9])</code> должен возвращать <code>[7, &quot;ate&quot;, 9]</code> .'
testString: 'assert.deepEqual(bouncer([7, "ate", "", false, 9]), [7, "ate", 9], "<code>bouncer([7, "ate", "", false, 9])</code> should return <code>[7, "ate", 9]</code>.");'
- text: '<code>bouncer([&quot;a&quot;, &quot;b&quot;, &quot;c&quot;])</code> должен возвращать <code>[&quot;a&quot;, &quot;b&quot;, &quot;c&quot;]</code> .'
testString: 'assert.deepEqual(bouncer(["a", "b", "c"]), ["a", "b", "c"], "<code>bouncer(["a", "b", "c"])</code> should return <code>["a", "b", "c"]</code>.");'
- text: '<code>bouncer([false, null, 0, NaN, undefined, &quot;&quot;])</code> должен возвращать <code>[]</code> .'
testString: 'assert.deepEqual(bouncer([false, null, 0, NaN, undefined, ""]), [], "<code>bouncer([false, null, 0, NaN, undefined, ""])</code> should return <code>[]</code>.");'
- text: '<code>bouncer([1, null, NaN, 2, undefined])</code> должен возвращать <code>[1, 2]</code> .'
testString: 'assert.deepEqual(bouncer([1, null, NaN, 2, undefined]), [1, 2], "<code>bouncer([1, null, NaN, 2, undefined])</code> should return <code>[1, 2]</code>.");'
- text: <code>bouncer([7, "ate", "", false, 9])</code> should return <code>[7, "ate", 9]</code>.
testString: assert.deepEqual(bouncer([7, "ate", "", false, 9]), [7, "ate", 9]);
- text: <code>bouncer(["a", "b", "c"])</code> should return <code>["a", "b", "c"]</code>.
testString: assert.deepEqual(bouncer(["a", "b", "c"]), ["a", "b", "c"]);
- text: <code>bouncer([false, null, 0, NaN, undefined, ""])</code> should return <code>[]</code>.
testString: assert.deepEqual(bouncer([false, null, 0, NaN, undefined, ""]), []);
- text: <code>bouncer([1, null, NaN, 2, undefined])</code> should return <code>[1, 2]</code>.
testString: assert.deepEqual(bouncer([1, null, NaN, 2, undefined]), [1, 2]);
```
@@ -49,14 +52,17 @@ bouncer([7, "ate", "", false, 9]);
</div>
</section>
## Solution
<section id='solution'>
```js
// solution required
function bouncer(arr) {
return arr.filter(e => e);
}
bouncer([7, "ate", "", false, 9]);
```
</section>

View File

@@ -3,15 +3,18 @@ id: a26cbbe9ad8655a977e1ceb5
title: Find the Longest Word in a String
isRequired: true
challengeType: 5
videoUrl: ''
forumTopicId: 16015
localeTitle: Найти самое длинное слово в строке
---
## Description
<section id="description"> Верните длину самого длинного слова в предоставленное предложение. Ваш ответ должен быть числом. Не забудьте использовать <a href="http://forum.freecodecamp.org/t/how-to-get-help-when-you-are-stuck/19514" target="_blank">Read-Search-Ask,</a> если вы застряли. Напишите свой собственный код. </section>
<section id='description'>
Верните длину самого длинного слова в предоставленное предложение. Ваш ответ должен быть числом. Не забудьте использовать <a href="http://forum.freecodecamp.org/t/how-to-get-help-when-you-are-stuck/19514" target="_blank">Read-Search-Ask,</a> если вы застряли. Напишите свой собственный код.
</section>
## Instructions
<section id="instructions">
<section id='instructions'>
</section>
## Tests
@@ -19,18 +22,18 @@ localeTitle: Найти самое длинное слово в строке
```yml
tests:
- text: <code>findLongestWordLength(&quot;The quick brown fox jumped over the lazy dog&quot;)</code> должна вернуть номер.
testString: 'assert(typeof findLongestWordLength("The quick brown fox jumped over the lazy dog") === "number", "<code>findLongestWordLength("The quick brown fox jumped over the lazy dog")</code> should return a number.");'
- text: <code>findLongestWordLength(&quot;The quick brown fox jumped over the lazy dog&quot;)</code> должна вернуться 6.
testString: 'assert(findLongestWordLength("The quick brown fox jumped over the lazy dog") === 6, "<code>findLongestWordLength("The quick brown fox jumped over the lazy dog")</code> should return 6.");'
- text: <code>findLongestWordLength(&quot;May the force be with you&quot;)</code> должна вернуть 5.
testString: 'assert(findLongestWordLength("May the force be with you") === 5, "<code>findLongestWordLength("May the force be with you")</code> should return 5.");'
- text: <code>findLongestWordLength(&quot;Google do a barrel roll&quot;)</code> должен вернуть 6.
testString: 'assert(findLongestWordLength("Google do a barrel roll") === 6, "<code>findLongestWordLength("Google do a barrel roll")</code> should return 6.");'
- text: <code>findLongestWordLength(&quot;What is the average airspeed velocity of an unladen swallow&quot;)</code> должна вернуться 8.
testString: 'assert(findLongestWordLength("What is the average airspeed velocity of an unladen swallow") === 8, "<code>findLongestWordLength("What is the average airspeed velocity of an unladen swallow")</code> should return 8.");'
- text: <code>findLongestWordLength(&quot;What if we try a super-long word such as otorhinolaryngology&quot;)</code> должно возвратиться 19.
testString: 'assert(findLongestWordLength("What if we try a super-long word such as otorhinolaryngology") === 19, "<code>findLongestWordLength("What if we try a super-long word such as otorhinolaryngology")</code> should return 19.");'
- text: <code>findLongestWordLength("The quick brown fox jumped over the lazy dog")</code> should return a number.
testString: assert(typeof findLongestWordLength("The quick brown fox jumped over the lazy dog") === "number");
- text: <code>findLongestWordLength("The quick brown fox jumped over the lazy dog")</code> should return 6.
testString: assert(findLongestWordLength("The quick brown fox jumped over the lazy dog") === 6);
- text: <code>findLongestWordLength("May the force be with you")</code> should return 5.
testString: assert(findLongestWordLength("May the force be with you") === 5);
- text: <code>findLongestWordLength("Google do a barrel roll")</code> should return 6.
testString: assert(findLongestWordLength("Google do a barrel roll") === 6);
- text: <code>findLongestWordLength("What is the average airspeed velocity of an unladen swallow")</code> should return 8.
testString: assert(findLongestWordLength("What is the average airspeed velocity of an unladen swallow") === 8);
- text: <code>findLongestWordLength("What if we try a super-long word such as otorhinolaryngology")</code> should return 19.
testString: assert(findLongestWordLength("What if we try a super-long word such as otorhinolaryngology") === 19);
```
@@ -52,14 +55,17 @@ findLongestWordLength("The quick brown fox jumped over the lazy dog");
</div>
</section>
## Solution
<section id='solution'>
```js
// solution required
function findLongestWordLength(str) {
return str.split(' ').sort((a, b) => b.length - a.length)[0].length;
}
findLongestWordLength("The quick brown fox jumped over the lazy dog");
```
</section>

View File

@@ -3,15 +3,18 @@ id: a6e40f1041b06c996f7b2406
title: Finders Keepers
isRequired: true
challengeType: 5
videoUrl: ''
forumTopicId: 16016
localeTitle: Finders Keepers
---
## Description
<section id="description"> Создайте функцию, которая просматривает массив (первый аргумент) и возвращает первый элемент в массиве, который проходит тест истины (второй аргумент). Если ни один элемент не проходит тест, возвращайте значение undefined. Не забудьте использовать <a href="http://forum.freecodecamp.org/t/how-to-get-help-when-you-are-stuck/19514" target="_blank">Read-Search-Ask,</a> если вы застряли. Попробуйте подключить программу. Напишите свой собственный код. </section>
<section id='description'>
Создайте функцию, которая просматривает массив (первый аргумент) и возвращает первый элемент в массиве, который проходит тест истины (второй аргумент). Если ни один элемент не проходит тест, возвращайте значение undefined. Не забудьте использовать <a href="http://forum.freecodecamp.org/t/how-to-get-help-when-you-are-stuck/19514" target="_blank">Read-Search-Ask,</a> если вы застряли. Попробуйте подключить программу. Напишите свой собственный код.
</section>
## Instructions
<section id="instructions">
<section id='instructions'>
</section>
## Tests
@@ -19,10 +22,10 @@ localeTitle: Finders Keepers
```yml
tests:
- text: '<code>findElement([1, 3, 5, 8, 9, 10], function(num) { return num % 2 === 0; })</code> должна вернуть 8.'
testString: 'assert.strictEqual(findElement([1, 3, 5, 8, 9, 10], function(num) { return num % 2 === 0; }), 8, "<code>findElement([1, 3, 5, 8, 9, 10], function(num) { return num % 2 === 0; })</code> should return 8.");'
- text: '<code>findElement([1, 3, 5, 9], function(num) { return num % 2 === 0; })</code> должен возвращать неопределенный.'
testString: 'assert.strictEqual(findElement([1, 3, 5, 9], function(num) { return num % 2 === 0; }), undefined, "<code>findElement([1, 3, 5, 9], function(num) { return num % 2 === 0; })</code> should return undefined.");'
- text: <code>findElement([1, 3, 5, 8, 9, 10], function(num) { return num % 2 === 0; })</code> should return 8.
testString: assert.strictEqual(findElement([1, 3, 5, 8, 9, 10], function(num) { return num % 2 === 0; }), 8);
- text: <code>findElement([1, 3, 5, 9], function(num) { return num % 2 === 0; })</code> should return undefined.
testString: assert.strictEqual(findElement([1, 3, 5, 9], function(num) { return num % 2 === 0; }), undefined);
```
@@ -45,14 +48,17 @@ findElement([1, 2, 3, 4], num => num % 2 === 0);
</div>
</section>
## Solution
<section id='solution'>
```js
// solution required
function findElement(arr, func) {
return arr.filter(func)[0];
}
findElement([1, 2, 3, 4], num => num % 2 === 0);
```
</section>

View File

@@ -3,15 +3,18 @@ id: af2170cad53daa0770fabdea
title: Mutations
isRequired: true
challengeType: 5
videoUrl: ''
forumTopicId: 16025
localeTitle: Мутации
---
## Description
<section id="description"> Возвращает true, если строка в первом элементе массива содержит все буквы строки во втором элементе массива. Например, <code>[&quot;hello&quot;, &quot;Hello&quot;]</code> должен возвращать true, потому что все буквы во второй строке присутствуют в первом, игнорирующем случае. Аргументы <code>[&quot;hello&quot;, &quot;hey&quot;]</code> должны возвращать false, потому что строка &quot;hello&quot; не содержит &quot;y&quot;. Наконец, <code>[&quot;Alien&quot;, &quot;line&quot;]</code> должен возвращать true, потому что все буквы в «строке» присутствуют в «Alien». Не забудьте использовать <a href="http://forum.freecodecamp.org/t/how-to-get-help-when-you-are-stuck/19514" target="_blank">Read-Search-Ask,</a> если вы застряли. Напишите свой собственный код. </section>
<section id='description'>
Возвращает true, если строка в первом элементе массива содержит все буквы строки во втором элементе массива. Например, <code>[&quot;hello&quot;, &quot;Hello&quot;]</code> должен возвращать true, потому что все буквы во второй строке присутствуют в первом, игнорирующем случае. Аргументы <code>[&quot;hello&quot;, &quot;hey&quot;]</code> должны возвращать false, потому что строка &quot;hello&quot; не содержит &quot;y&quot;. Наконец, <code>[&quot;Alien&quot;, &quot;line&quot;]</code> должен возвращать true, потому что все буквы в «строке» присутствуют в «Alien». Не забудьте использовать <a href="http://forum.freecodecamp.org/t/how-to-get-help-when-you-are-stuck/19514" target="_blank">Read-Search-Ask,</a> если вы застряли. Напишите свой собственный код.
</section>
## Instructions
<section id="instructions">
<section id='instructions'>
</section>
## Tests
@@ -19,24 +22,24 @@ localeTitle: Мутации
```yml
tests:
- text: '<code>mutation([&quot;hello&quot;, &quot;hey&quot;])</code> должна возвращать false.'
testString: 'assert(mutation(["hello", "hey"]) === false, "<code>mutation(["hello", "hey"])</code> should return false.");'
- text: '<code>mutation([&quot;hello&quot;, &quot;Hello&quot;])</code> должна возвращать true.'
testString: 'assert(mutation(["hello", "Hello"]) === true, "<code>mutation(["hello", "Hello"])</code> should return true.");'
- text: ''
testString: 'assert(mutation(["zyxwvutsrqponmlkjihgfedcba", "qrstu"]) === true, "<code>mutation(["zyxwvutsrqponmlkjihgfedcba", "qrstu"])</code> should return true.");'
- text: ''
testString: 'assert(mutation(["Mary", "Army"]) === true, "<code>mutation(["Mary", "Army"])</code> should return true.");'
- text: ''
testString: 'assert(mutation(["Mary", "Aarmy"]) === true, "<code>mutation(["Mary", "Aarmy"])</code> should return true.");'
- text: ''
testString: 'assert(mutation(["Alien", "line"]) === true, "<code>mutation(["Alien", "line"])</code> should return true.");'
- text: '<code>mutation([&quot;floor&quot;, &quot;for&quot;])</code> должна возвращать true.'
testString: 'assert(mutation(["floor", "for"]) === true, "<code>mutation(["floor", "for"])</code> should return true.");'
- text: ''
testString: 'assert(mutation(["hello", "neo"]) === false, "<code>mutation(["hello", "neo"])</code> should return false.");'
- text: '<code>mutation([&quot;voodoo&quot;, &quot;no&quot;])</code> возвращает false.'
testString: 'assert(mutation(["voodoo", "no"]) === false, "<code>mutation(["voodoo", "no"])</code> should return false.");'
- text: <code>mutation(["hello", "hey"])</code> should return false.
testString: assert(mutation(["hello", "hey"]) === false);
- text: <code>mutation(["hello", "Hello"])</code> should return true.
testString: assert(mutation(["hello", "Hello"]) === true);
- text: <code>mutation(["zyxwvutsrqponmlkjihgfedcba", "qrstu"])</code> should return true.
testString: assert(mutation(["zyxwvutsrqponmlkjihgfedcba", "qrstu"]) === true);
- text: <code>mutation(["Mary", "Army"])</code> should return true.
testString: assert(mutation(["Mary", "Army"]) === true);
- text: <code>mutation(["Mary", "Aarmy"])</code> should return true.
testString: assert(mutation(["Mary", "Aarmy"]) === true);
- text: <code>mutation(["Alien", "line"])</code> should return true.
testString: assert(mutation(["Alien", "line"]) === true);
- text: <code>mutation(["floor", "for"])</code> should return true.
testString: assert(mutation(["floor", "for"]) === true);
- text: <code>mutation(["hello", "neo"])</code> should return false.
testString: assert(mutation(["hello", "neo"]) === false);
- text: <code>mutation(["voodoo", "no"])</code> should return false.
testString: assert(mutation(["voodoo", "no"]) === false);
```
@@ -58,14 +61,21 @@ mutation(["hello", "hey"]);
</div>
</section>
## Solution
<section id='solution'>
```js
// solution required
function mutation(arr) {
let hash = Object.create(null);
arr[0].toLowerCase().split('').forEach(c => hash[c] = true);
return !arr[1].toLowerCase().split('').filter(c => !hash[c]).length;
}
mutation(["hello", "hey"]);
```
</section>

View File

@@ -3,15 +3,18 @@ id: afcc8d540bea9ea2669306b6
title: Repeat a String Repeat a String
isRequired: true
challengeType: 5
videoUrl: ''
forumTopicId: 16041
localeTitle: Повторить строку Повторить строку
---
## Description
<section id="description"> Повторите заданную строку <code>str</code> (первый аргумент) для <code>num</code> times (второй аргумент). Верните пустую строку, если <code>num</code> не является положительным числом. Не забудьте использовать <a href="http://forum.freecodecamp.org/t/how-to-get-help-when-you-are-stuck/19514" target="_blank">Read-Search-Ask,</a> если вы застряли. Напишите свой собственный код. </section>
<section id='description'>
Повторите заданную строку <code>str</code> (первый аргумент) для <code>num</code> times (второй аргумент). Верните пустую строку, если <code>num</code> не является положительным числом. Не забудьте использовать <a href="http://forum.freecodecamp.org/t/how-to-get-help-when-you-are-stuck/19514" target="_blank">Read-Search-Ask,</a> если вы застряли. Напишите свой собственный код.
</section>
## Instructions
<section id="instructions">
<section id='instructions'>
</section>
## Tests
@@ -19,20 +22,22 @@ localeTitle: Повторить строку Повторить строку
```yml
tests:
- text: '<code>repeatStringNumTimes(&quot;*&quot;, 3)</code> должен возвращать <code>&quot;***&quot;</code> .'
testString: 'assert(repeatStringNumTimes("*", 3) === "***", "<code>repeatStringNumTimes("*", 3)</code> should return <code>"***"</code>.");'
- text: ''
testString: 'assert(repeatStringNumTimes("abc", 3) === "abcabcabc", "<code>repeatStringNumTimes("abc", 3)</code> should return <code>"abcabcabc"</code>.");'
- text: '<code>repeatStringNumTimes(&quot;abc&quot;, 4)</code> должен возвращать <code>&quot;abcabcabcabc&quot;</code> .'
testString: 'assert(repeatStringNumTimes("abc", 4) === "abcabcabcabc", "<code>repeatStringNumTimes("abc", 4)</code> should return <code>"abcabcabcabc"</code>.");'
- text: '<code>repeatStringNumTimes(&quot;abc&quot;, 1)</code> должен возвращать <code>&quot;abc&quot;</code> .'
testString: 'assert(repeatStringNumTimes("abc", 1) === "abc", "<code>repeatStringNumTimes("abc", 1)</code> should return <code>"abc"</code>.");'
- text: '<code>repeatStringNumTimes(&quot;*&quot;, 8)</code> должен возвращать <code>&quot;********&quot;</code> .'
testString: 'assert(repeatStringNumTimes("*", 8) === "********", "<code>repeatStringNumTimes("*", 8)</code> should return <code>"********"</code>.");'
- text: '<code>repeatStringNumTimes(&quot;abc&quot;, -2)</code> должен возвращать <code>&quot;&quot;</code> .'
testString: 'assert(repeatStringNumTimes("abc", -2) === "", "<code>repeatStringNumTimes("abc", -2)</code> should return <code>""</code>.");'
- text: Нельзя использовать встроенный метод <code>repeat()</code>
testString: 'assert(!/\.repeat/g.test(code), "The built-in <code>repeat()</code>-method should not be used");'
- text: <code>repeatStringNumTimes("*", 3)</code> should return <code>"***"</code>.
testString: assert(repeatStringNumTimes("*", 3) === "***");
- text: <code>repeatStringNumTimes("abc", 3)</code> should return <code>"abcabcabc"</code>.
testString: assert(repeatStringNumTimes("abc", 3) === "abcabcabc");
- text: <code>repeatStringNumTimes("abc", 4)</code> should return <code>"abcabcabcabc"</code>.
testString: assert(repeatStringNumTimes("abc", 4) === "abcabcabcabc");
- text: <code>repeatStringNumTimes("abc", 1)</code> should return <code>"abc"</code>.
testString: assert(repeatStringNumTimes("abc", 1) === "abc");
- text: <code>repeatStringNumTimes("*", 8)</code> should return <code>"********"</code>.
testString: assert(repeatStringNumTimes("*", 8) === "********");
- text: <code>repeatStringNumTimes("abc", -2)</code> should return <code>""</code>.
testString: assert(repeatStringNumTimes("abc", -2) === "");
- text: The built-in <code>repeat()</code> method should not be used.
testString: assert(!/\.repeat/g.test(code));
- text: <code>repeatStringNumTimes("abc", 0)</code> should return <code>""</code>.
testString: assert(repeatStringNumTimes("abc", 0) === "");
```
@@ -55,14 +60,18 @@ repeatStringNumTimes("abc", 3);
</div>
</section>
## Solution
<section id='solution'>
```js
// solution required
function repeatStringNumTimes(str, num) {
if (num < 1) return '';
return num === 1 ? str : str + repeatStringNumTimes(str, num-1);
}
repeatStringNumTimes("abc", 3);
```
</section>

View File

@@ -3,15 +3,18 @@ id: a789b3483989747d63b0e427
title: Return Largest Numbers in Arrays
isRequired: true
challengeType: 5
videoUrl: ''
forumTopicId: 16042
localeTitle: Возвращает наибольшие числа в массивах
---
## Description
<section id="description"> Возвращает массив, состоящий из наибольшего числа из каждого предоставленного подматрица. Для простоты предоставленный массив будет содержать ровно 4 поддиапазона. Помните, вы можете перебирать массив с помощью простого цикла и обращаться к каждому члену с синтаксисом массива <code>arr[i]</code> . Не забудьте использовать <a href="http://forum.freecodecamp.org/t/how-to-get-help-when-you-are-stuck/19514" target="_blank">Read-Search-Ask,</a> если вы застряли. Напишите свой собственный код. </section>
<section id='description'>
Возвращает массив, состоящий из наибольшего числа из каждого предоставленного подматрица. Для простоты предоставленный массив будет содержать ровно 4 поддиапазона. Помните, вы можете перебирать массив с помощью простого цикла и обращаться к каждому члену с синтаксисом массива <code>arr[i]</code> . Не забудьте использовать <a href="http://forum.freecodecamp.org/t/how-to-get-help-when-you-are-stuck/19514" target="_blank">Read-Search-Ask,</a> если вы застряли. Напишите свой собственный код.
</section>
## Instructions
<section id="instructions">
<section id='instructions'>
</section>
## Tests
@@ -19,14 +22,14 @@ localeTitle: Возвращает наибольшие числа в масси
```yml
tests:
- text: '<code>largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]])</code> должны возвращать массив.'
testString: 'assert(largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]).constructor === Array, "<code>largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]])</code> should return an array.");'
- text: '<code>largestOfFour([[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]])</code> должны возвращаться <code>[27, 5, 39, 1001]</code> .'
testString: 'assert.deepEqual(largestOfFour([[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]]), [27, 5, 39, 1001], "<code>largestOfFour([[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]])</code> should return <code>[27, 5, 39, 1001]</code>.");'
- text: '<code>largestOfFour([[4, 9, 1, 3], [13, 35, 18, 26], [32, 35, 97, 39], [1000000, 1001, 857, 1]])</code> должны возвращаться <code>[9, 35, 97, 1000000]</code> .'
testString: 'assert.deepEqual(largestOfFour([[4, 9, 1, 3], [13, 35, 18, 26], [32, 35, 97, 39], [1000000, 1001, 857, 1]]), [9, 35, 97, 1000000], "<code>largestOfFour([[4, 9, 1, 3], [13, 35, 18, 26], [32, 35, 97, 39], [1000000, 1001, 857, 1]])</code> should return <code>[9, 35, 97, 1000000]</code>.");'
- text: '<code>largestOfFour([[17, 23, 25, 12], [25, 7, 34, 48], [4, -10, 18, 21], [-72, -3, -17, -10]])</code> должны return <code>[25, 48, 21, -3]</code> .'
testString: 'assert.deepEqual(largestOfFour([[17, 23, 25, 12], [25, 7, 34, 48], [4, -10, 18, 21], [-72, -3, -17, -10]]), [25, 48, 21, -3], "<code>largestOfFour([[17, 23, 25, 12], [25, 7, 34, 48], [4, -10, 18, 21], [-72, -3, -17, -10]])</code> should return <code>[25, 48, 21, -3]</code>.");'
- text: <code>largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]])</code> should return an array.
testString: assert(largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]).constructor === Array);
- text: <code>largestOfFour([[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]])</code> should return <code>[27, 5, 39, 1001]</code>.
testString: assert.deepEqual(largestOfFour([[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]]), [27, 5, 39, 1001]);
- text: <code>largestOfFour([[4, 9, 1, 3], [13, 35, 18, 26], [32, 35, 97, 39], [1000000, 1001, 857, 1]])</code> should return <code>[9, 35, 97, 1000000]</code>.
testString: assert.deepEqual(largestOfFour([[4, 9, 1, 3], [13, 35, 18, 26], [32, 35, 97, 39], [1000000, 1001, 857, 1]]), [9, 35, 97, 1000000]);
- text: <code>largestOfFour([[17, 23, 25, 12], [25, 7, 34, 48], [4, -10, 18, 21], [-72, -3, -17, -10]])</code> should return <code>[25, 48, 21, -3]</code>.
testString: assert.deepEqual(largestOfFour([[17, 23, 25, 12], [25, 7, 34, 48], [4, -10, 18, 21], [-72, -3, -17, -10]]), [25, 48, 21, -3]);
```
@@ -49,14 +52,17 @@ largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 85
</div>
</section>
## Solution
<section id='solution'>
```js
// solution required
function largestOfFour(arr) {
return arr.map(subArr => Math.max.apply(null, subArr));
}
largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);
```
</section>

View File

@@ -3,15 +3,18 @@ id: a202eed8fc186c8434cb6d61
title: Reverse a String
isRequired: true
challengeType: 5
videoUrl: ''
forumTopicId: 16043
localeTitle: Обратить строку
---
## Description
<section id="description"> Переверните предоставленную строку. Возможно, вам придется перевернуть строку в массив, прежде чем вы сможете ее отменить. Ваш результат должен быть строкой. Не забудьте использовать <a href="http://forum.freecodecamp.org/t/how-to-get-help-when-you-are-stuck/19514" target="_blank">Read-Search-Ask,</a> если вы застряли. Напишите свой собственный код. </section>
<section id='description'>
Переверните предоставленную строку. Возможно, вам придется перевернуть строку в массив, прежде чем вы сможете ее отменить. Ваш результат должен быть строкой. Не забудьте использовать <a href="http://forum.freecodecamp.org/t/how-to-get-help-when-you-are-stuck/19514" target="_blank">Read-Search-Ask,</a> если вы застряли. Напишите свой собственный код.
</section>
## Instructions
<section id="instructions">
<section id='instructions'>
</section>
## Tests
@@ -19,14 +22,14 @@ localeTitle: Обратить строку
```yml
tests:
- text: <code>reverseString(&quot;hello&quot;)</code> должен возвращать строку.
testString: 'assert(typeof reverseString("hello") === "string", "<code>reverseString("hello")</code> should return a string.");'
- text: <code>reverseString(&quot;hello&quot;)</code> должно стать <code>&quot;olleh&quot;</code> .
testString: 'assert(reverseString("hello") === "olleh", "<code>reverseString("hello")</code> should become <code>"olleh"</code>.");'
- text: <code>reverseString(&quot;Howdy&quot;)</code> должен стать <code>&quot;ydwoH&quot;</code> .
testString: 'assert(reverseString("Howdy") === "ydwoH", "<code>reverseString("Howdy")</code> should become <code>"ydwoH"</code>.");'
- text: <code>reverseString(&quot;Greetings from Earth&quot;)</code> должен возвращать <code>&quot;htraE morf sgniteerG&quot;</code> .
testString: 'assert(reverseString("Greetings from Earth") === "htraE morf sgniteerG", "<code>reverseString("Greetings from Earth")</code> should return <code>"htraE morf sgniteerG"</code>.");'
- text: <code>reverseString("hello")</code> should return a string.
testString: assert(typeof reverseString("hello") === "string");
- text: <code>reverseString("hello")</code> should become <code>"olleh"</code>.
testString: assert(reverseString("hello") === "olleh");
- text: <code>reverseString("Howdy")</code> should become <code>"ydwoH"</code>.
testString: assert(reverseString("Howdy") === "ydwoH");
- text: <code>reverseString("Greetings from Earth")</code> should return <code>"htraE morf sgniteerG"</code>.
testString: assert(reverseString("Greetings from Earth") === "htraE morf sgniteerG");
```
@@ -48,14 +51,17 @@ reverseString("hello");
</div>
</section>
## Solution
<section id='solution'>
```js
// solution required
function reverseString(str) {
return str.split('').reverse().join('');
}
reverseString("hello");
```
</section>

View File

@@ -4,15 +4,18 @@ title: Slice and Splice
isRequired: true
isBeta: true
challengeType: 5
videoUrl: ''
forumTopicId: 301148
localeTitle: Нарезка и сращивание
---
## Description
<section id="description"> Вам даны два массива и индекс. Используйте метод массива <code>slice</code> и <code>splice</code> для копирования каждого элемента первого массива во второй массив по порядку. Начните вставлять элементы в индекс <code>n</code> второго массива. Верните результирующий массив. Входные массивы должны оставаться неизменными после запуска функции. Не забудьте использовать <a href="http://forum.freecodecamp.org/t/how-to-get-help-when-you-are-stuck/19514" target="_blank">Read-Search-Ask,</a> если вы застряли. Напишите свой собственный код. </section>
<section id='description'>
Вам даны два массива и индекс. Используйте метод массива <code>slice</code> и <code>splice</code> для копирования каждого элемента первого массива во второй массив по порядку. Начните вставлять элементы в индекс <code>n</code> второго массива. Верните результирующий массив. Входные массивы должны оставаться неизменными после запуска функции. Не забудьте использовать <a href="http://forum.freecodecamp.org/t/how-to-get-help-when-you-are-stuck/19514" target="_blank">Read-Search-Ask,</a> если вы застряли. Напишите свой собственный код.
</section>
## Instructions
<section id="instructions">
<section id='instructions'>
</section>
## Tests
@@ -20,18 +23,18 @@ localeTitle: Нарезка и сращивание
```yml
tests:
- text: '<code>frankenSplice([1, 2, 3], [4, 5], 1)</code> должен вернуться <code>[4, 1, 2, 3, 5]</code> .'
testString: 'assert.deepEqual(frankenSplice([1, 2, 3], [4, 5], 1), [4, 1, 2, 3, 5], "<code>frankenSplice([1, 2, 3], [4, 5], 1)</code> should return <code>[4, 1, 2, 3, 5]</code>.");'
- text: '<code>frankenSplice([1, 2], [&quot;a&quot;, &quot;b&quot;], 1)</code> должны возвращать <code>[&quot;a&quot;, 1, 2, &quot;b&quot;]</code> .'
testString: 'assert.deepEqual(frankenSplice(testArr1, testArr2, 1), ["a", 1, 2, "b"], "<code>frankenSplice([1, 2], ["a", "b"], 1)</code> should return <code>["a", 1, 2, "b"]</code>.");'
- text: '<code>frankenSplice([&quot;claw&quot;, &quot;tentacle&quot;], [&quot;head&quot;, &quot;shoulders&quot;, &quot;knees&quot;, &quot;toes&quot;], 2)</code> должны возвращать <code>[&quot;head&quot;, &quot;shoulders&quot;, &quot;claw&quot;, &quot;tentacle&quot;, &quot;knees&quot;, &quot;toes&quot;]</code> .'
testString: 'assert.deepEqual(frankenSplice(["claw", "tentacle"], ["head", "shoulders", "knees", "toes"], 2), ["head", "shoulders", "claw", "tentacle", "knees", "toes"], "<code>frankenSplice(["claw", "tentacle"], ["head", "shoulders", "knees", "toes"], 2)</code> should return <code>["head", "shoulders", "claw", "tentacle", "knees", "toes"]</code>.");'
- text: Все элементы из первого массива должны быть добавлены ко второму массиву в исходном порядке.
testString: 'assert.deepEqual(frankenSplice([1, 2, 3, 4], [], 0), [1, 2, 3, 4], "All elements from the first array should be added to the second array in their original order.");'
- text: Первый массив должен оставаться неизменным после запуска функции.
testString: 'assert(testArr1[0] === 1 && testArr1[1] === 2, "The first array should remain the same after the function runs.");'
- text: Второй массив должен оставаться неизменным после запуска функции.
testString: 'assert(testArr2[0] === "a" && testArr2[1] === "b", "The second array should remain the same after the function runs.");'
- text: <code>frankenSplice([1, 2, 3], [4, 5], 1)</code> should return <code>[4, 1, 2, 3, 5]</code>.
testString: assert.deepEqual(frankenSplice([1, 2, 3], [4, 5], 1), [4, 1, 2, 3, 5]);
- text: <code>frankenSplice([1, 2], ["a", "b"], 1)</code> should return <code>["a", 1, 2, "b"]</code>.
testString: assert.deepEqual(frankenSplice(testArr1, testArr2, 1), ["a", 1, 2, "b"]);
- text: <code>frankenSplice(["claw", "tentacle"], ["head", "shoulders", "knees", "toes"], 2)</code> should return <code>["head", "shoulders", "claw", "tentacle", "knees", "toes"]</code>.
testString: assert.deepEqual(frankenSplice(["claw", "tentacle"], ["head", "shoulders", "knees", "toes"], 2), ["head", "shoulders", "claw", "tentacle", "knees", "toes"]);
- text: All elements from the first array should be added to the second array in their original order.
testString: assert.deepEqual(frankenSplice([1, 2, 3, 4], [], 0), [1, 2, 3, 4]);
- text: The first array should remain the same after the function runs.
testString: assert(testArr1[0] === 1 && testArr1[1] === 2);
- text: The second array should remain the same after the function runs.
testString: assert(testArr2[0] === "a" && testArr2[1] === "b");
```
@@ -54,12 +57,13 @@ frankenSplice([1, 2, 3], [4, 5, 6], 1);
</div>
### After Test
### After Tests
<div id='js-teardown'>
```js
console.info('after the test');
let testArr1 = [1, 2];
let testArr2 = ["a", "b"];
```
</div>
@@ -70,6 +74,16 @@ console.info('after the test');
<section id='solution'>
```js
// solution required
function frankenSplice(arr1, arr2, n) {
// It's alive. It's alive!
let result = arr2.slice();
for (let i = 0; i < arr1.length; i++) {
result.splice(n+i, 0, arr1[i]);
}
return result;
}
frankenSplice([1, 2, 3], [4, 5], 1);
```
</section>

View File

@@ -3,15 +3,18 @@ id: ab6137d4e35944e21037b769
title: Title Case a Sentence
isRequired: true
challengeType: 5
videoUrl: ''
forumTopicId: 16088
localeTitle: Название Случайное предложение
---
## Description
<section id="description"> Верните предоставленную строку с первой буквой каждого слова, заглавными. Убедитесь, что остальная часть слова находится в нижнем регистре. Для целей этого упражнения вы также должны использовать прописные слова, такие как «the» и «of». Не забудьте использовать <a href="http://forum.freecodecamp.org/t/how-to-get-help-when-you-are-stuck/19514" target="_blank">Read-Search-Ask,</a> если вы застряли. Напишите свой собственный код. </section>
<section id='description'>
Верните предоставленную строку с первой буквой каждого слова, заглавными. Убедитесь, что остальная часть слова находится в нижнем регистре. Для целей этого упражнения вы также должны использовать прописные слова, такие как «the» и «of». Не забудьте использовать <a href="http://forum.freecodecamp.org/t/how-to-get-help-when-you-are-stuck/19514" target="_blank">Read-Search-Ask,</a> если вы застряли. Напишите свой собственный код.
</section>
## Instructions
<section id="instructions">
<section id='instructions'>
</section>
## Tests
@@ -19,14 +22,14 @@ localeTitle: Название Случайное предложение
```yml
tests:
- text: '<code>titleCase(&quot;I&#39;m a little tea pot&quot;)</code> должен возвращать строку.'
testString: 'assert(typeof titleCase("I"m a little tea pot") === "string", "<code>titleCase("I&#39;m a little tea pot")</code> should return a string.");'
- text: '<code>titleCase(&quot;I&#39;m a little tea pot&quot;)</code> должен вернуться, <code>I&#39;m A Little Tea Pot</code> .'
testString: 'assert(titleCase("I"m a little tea pot") === "I"m A Little Tea Pot", "<code>titleCase("I&#39;m a little tea pot")</code> should return <code>I&#39;m A Little Tea Pot</code>.");'
- text: <code>titleCase(&quot;sHoRt AnD sToUt&quot;)</code> должен возвращать <code>Short And Stout</code> .
testString: 'assert(titleCase("sHoRt AnD sToUt") === "Short And Stout", "<code>titleCase("sHoRt AnD sToUt")</code> should return <code>Short And Stout</code>.");'
- text: ''
testString: 'assert(titleCase("HERE IS MY HANDLE HERE IS MY SPOUT") === "Here Is My Handle Here Is My Spout", "<code>titleCase("HERE IS MY HANDLE HERE IS MY SPOUT")</code> should return <code>Here Is My Handle Here Is My Spout</code>.");'
- text: <code>titleCase("I&#39;m a little tea pot")</code> should return a string.
testString: assert(typeof titleCase("I'm a little tea pot") === "string");
- text: <code>titleCase("I&#39;m a little tea pot")</code> should return <code>I&#39;m A Little Tea Pot</code>.
testString: assert(titleCase("I'm a little tea pot") === "I'm A Little Tea Pot");
- text: <code>titleCase("sHoRt AnD sToUt")</code> should return <code>Short And Stout</code>.
testString: assert(titleCase("sHoRt AnD sToUt") === "Short And Stout");
- text: <code>titleCase("HERE IS MY HANDLE HERE IS MY SPOUT")</code> should return <code>Here Is My Handle Here Is My Spout</code>.
testString: assert(titleCase("HERE IS MY HANDLE HERE IS MY SPOUT") === "Here Is My Handle Here Is My Spout");
```
@@ -48,14 +51,17 @@ titleCase("I'm a little tea pot");
</div>
</section>
## Solution
<section id='solution'>
```js
// solution required
function titleCase(str) {
return str.split(' ').map(word => word.charAt(0).toUpperCase() + word.substring(1).toLowerCase()).join(' ');
}
titleCase("I'm a little tea pot");
```
</section>

View File

@@ -3,15 +3,18 @@ id: ac6993d51946422351508a41
title: Truncate a String
isRequired: true
challengeType: 5
videoUrl: ''
forumTopicId: 16089
localeTitle: Усекать строку
---
## Description
<section id="description"> Усечь строку (первый аргумент), если она длиннее заданной максимальной длины строки (второй аргумент). Возвращает усеченную строку с <code>...</code> окончанием. Не забудьте использовать <a href="http://forum.freecodecamp.org/t/how-to-get-help-when-you-are-stuck/19514" target="_blank">Read-Search-Ask,</a> если вы застряли. Напишите свой собственный код. </section>
<section id='description'>
Усечь строку (первый аргумент), если она длиннее заданной максимальной длины строки (второй аргумент). Возвращает усеченную строку с <code>...</code> окончанием. Не забудьте использовать <a href="http://forum.freecodecamp.org/t/how-to-get-help-when-you-are-stuck/19514" target="_blank">Read-Search-Ask,</a> если вы застряли. Напишите свой собственный код.
</section>
## Instructions
<section id="instructions">
<section id='instructions'>
</section>
## Tests
@@ -19,18 +22,18 @@ localeTitle: Усекать строку
```yml
tests:
- text: '<code>truncateString(&quot;A-tisket a-tasket A green and yellow basket&quot;, 8)</code> должен вернуть «A-tisket ...».'
testString: 'assert(truncateString("A-tisket a-tasket A green and yellow basket", 8) === "A-tisket...", "<code>truncateString("A-tisket a-tasket A green and yellow basket", 8)</code> should return "A-tisket...".");'
- text: '<code>truncateString(&quot;Peter Piper picked a peck of pickled peppers&quot;, 11)</code> должен вернуться «Питер Пайпер ...».'
testString: 'assert(truncateString("Peter Piper picked a peck of pickled peppers", 11) === "Peter Piper...", "<code>truncateString("Peter Piper picked a peck of pickled peppers", 11)</code> should return "Peter Piper...".");'
- text: '<code>truncateString(&quot;A-tisket a-tasket A green and yellow basket&quot;, &quot;A-tisket a-tasket A green and yellow basket&quot;.length)</code> должна возвращать «A-tisket a-tasket« Зеленая и желтая корзина ».'
testString: 'assert(truncateString("A-tisket a-tasket A green and yellow basket", "A-tisket a-tasket A green and yellow basket".length) === "A-tisket a-tasket A green and yellow basket", "<code>truncateString("A-tisket a-tasket A green and yellow basket", "A-tisket a-tasket A green and yellow basket".length)</code> should return "A-tisket a-tasket A green and yellow basket".");'
- text: '<code>truncateString(&quot;A-tisket a-tasket A green and yellow basket&quot;, &quot;A-tisket a-tasket A green and yellow basket&quot;.length + 2)</code> должна возвращать «A-tisket a-tasket Зеленая и желтая корзина».'
testString: 'assert(truncateString("A-tisket a-tasket A green and yellow basket", "A-tisket a-tasket A green and yellow basket".length + 2) === "A-tisket a-tasket A green and yellow basket", "<code>truncateString("A-tisket a-tasket A green and yellow basket", "A-tisket a-tasket A green and yellow basket".length + 2)</code> should return "A-tisket a-tasket A green and yellow basket".");'
- text: '<code>truncateString(&quot;A-&quot;, 1)</code> должен возвращать «A ...».'
testString: 'assert(truncateString("A-", 1) === "A...", "<code>truncateString("A-", 1)</code> should return "A...".");'
- text: '<code>truncateString(&quot;Absolutely Longer&quot;, 2)</code> должен возвращать «Ab ...».'
testString: 'assert(truncateString("Absolutely Longer", 2) === "Ab...", "<code>truncateString("Absolutely Longer", 2)</code> should return "Ab...".");'
- text: <code>truncateString("A-tisket a-tasket A green and yellow basket", 8)</code> should return "A-tisket...".
testString: assert(truncateString("A-tisket a-tasket A green and yellow basket", 8) === "A-tisket...");
- text: <code>truncateString("Peter Piper picked a peck of pickled peppers", 11)</code> should return "Peter Piper...".
testString: assert(truncateString("Peter Piper picked a peck of pickled peppers", 11) === "Peter Piper...");
- text: <code>truncateString("A-tisket a-tasket A green and yellow basket", "A-tisket a-tasket A green and yellow basket".length)</code> should return "A-tisket a-tasket A green and yellow basket".
testString: assert(truncateString("A-tisket a-tasket A green and yellow basket", "A-tisket a-tasket A green and yellow basket".length) === "A-tisket a-tasket A green and yellow basket");
- text: <code>truncateString("A-tisket a-tasket A green and yellow basket", "A-tisket a-tasket A green and yellow basket".length + 2)</code> should return "A-tisket a-tasket A green and yellow basket".
testString: assert(truncateString('A-tisket a-tasket A green and yellow basket', 'A-tisket a-tasket A green and yellow basket'.length + 2) === 'A-tisket a-tasket A green and yellow basket');
- text: <code>truncateString("A-", 1)</code> should return "A...".
testString: assert(truncateString("A-", 1) === "A...");
- text: <code>truncateString("Absolutely Longer", 2)</code> should return "Ab...".
testString: assert(truncateString("Absolutely Longer", 2) === "Ab...");
```
@@ -53,14 +56,21 @@ truncateString("A-tisket a-tasket A green and yellow basket", 8);
</div>
</section>
## Solution
<section id='solution'>
```js
// solution required
function truncateString(str, num) {
if (num >= str.length) {
return str;
}
return str.slice(0, num) + '...';
}
truncateString("A-tisket a-tasket A green and yellow basket", 8);
```
</section>

View File

@@ -3,15 +3,18 @@ id: a24c1a4622e3c05097f71d67
title: Where do I Belong
isRequired: true
challengeType: 5
videoUrl: ''
forumTopicId: 16094
localeTitle: Где я живу
---
## Description
<section id="description"> Возвратите наименьший индекс, по которому значение (второй аргумент) должно быть вставлено в массив (первый аргумент) после его сортировки. Возвращаемое значение должно быть числом. Например, <code>getIndexToIns([1,2,3,4], 1.5)</code> должен возвращать <code>1</code> потому что он больше <code>1</code> (индекс 0), но меньше <code>2</code> (индекс 1). Аналогично, <code>getIndexToIns([20,3,5], 19)</code> должен вернуть <code>2</code> потому что, как только массив будет отсортирован, он будет выглядеть как <code>[3,5,20]</code> а <code>19</code> меньше <code>20</code> (индекс 2) и больше <code>5</code> ( индекс 1). Не забудьте использовать <a href="http://forum.freecodecamp.org/t/how-to-get-help-when-you-are-stuck/19514" target="_blank">Read-Search-Ask,</a> если вы застряли. Напишите свой собственный код. </section>
<section id='description'>
Возвратите наименьший индекс, по которому значение (второй аргумент) должно быть вставлено в массив (первый аргумент) после его сортировки. Возвращаемое значение должно быть числом. Например, <code>getIndexToIns([1,2,3,4], 1.5)</code> должен возвращать <code>1</code> потому что он больше <code>1</code> (индекс 0), но меньше <code>2</code> (индекс 1). Аналогично, <code>getIndexToIns([20,3,5], 19)</code> должен вернуть <code>2</code> потому что, как только массив будет отсортирован, он будет выглядеть как <code>[3,5,20]</code> а <code>19</code> меньше <code>20</code> (индекс 2) и больше <code>5</code> ( индекс 1). Не забудьте использовать <a href="http://forum.freecodecamp.org/t/how-to-get-help-when-you-are-stuck/19514" target="_blank">Read-Search-Ask,</a> если вы застряли. Напишите свой собственный код.
</section>
## Instructions
<section id="instructions">
<section id='instructions'>
</section>
## Tests
@@ -19,38 +22,38 @@ localeTitle: Где я живу
```yml
tests:
- text: '<code>getIndexToIns([10, 20, 30, 40, 50], 35)</code> должен вернуть <code>3</code> .'
testString: 'assert(getIndexToIns([10, 20, 30, 40, 50], 35) === 3, "<code>getIndexToIns([10, 20, 30, 40, 50], 35)</code> should return <code>3</code>.");'
- text: '<code>getIndexToIns([10, 20, 30, 40, 50], 35)</code> должен возвращать число.'
testString: 'assert(typeof(getIndexToIns([10, 20, 30, 40, 50], 35)) === "number", "<code>getIndexToIns([10, 20, 30, 40, 50], 35)</code> should return a number.");'
- text: '<code>getIndexToIns([10, 20, 30, 40, 50], 30)</code> должен возвращать <code>2</code> .'
testString: 'assert(getIndexToIns([10, 20, 30, 40, 50], 30) === 2, "<code>getIndexToIns([10, 20, 30, 40, 50], 30)</code> should return <code>2</code>.");'
- text: '<code>getIndexToIns([10, 20, 30, 40, 50], 30)</code> должен возвращать число.'
testString: 'assert(typeof(getIndexToIns([10, 20, 30, 40, 50], 30)) === "number", "<code>getIndexToIns([10, 20, 30, 40, 50], 30)</code> should return a number.");'
- text: '<code>getIndexToIns([40, 60], 50)</code> должен возвращать <code>1</code> .'
testString: 'assert(getIndexToIns([40, 60], 50) === 1, "<code>getIndexToIns([40, 60], 50)</code> should return <code>1</code>.");'
- text: '<code>getIndexToIns([40, 60], 50)</code> должен возвращать число.'
testString: 'assert(typeof(getIndexToIns([40, 60], 50)) === "number", "<code>getIndexToIns([40, 60], 50)</code> should return a number.");'
- text: '<code>getIndexToIns([3, 10, 5], 3)</code> должен вернуть <code>0</code> .'
testString: 'assert(getIndexToIns([3, 10, 5], 3) === 0, "<code>getIndexToIns([3, 10, 5], 3)</code> should return <code>0</code>.");'
- text: '<code>getIndexToIns([3, 10, 5], 3)</code> должен возвращать число.'
testString: 'assert(typeof(getIndexToIns([3, 10, 5], 3)) === "number", "<code>getIndexToIns([3, 10, 5], 3)</code> should return a number.");'
- text: '<code>getIndexToIns([5, 3, 20, 3], 5)</code> должен вернуть <code>2</code> .'
testString: 'assert(getIndexToIns([5, 3, 20, 3], 5) === 2, "<code>getIndexToIns([5, 3, 20, 3], 5)</code> should return <code>2</code>.");'
- text: '<code>getIndexToIns([5, 3, 20, 3], 5)</code> должен возвращать число.'
testString: 'assert(typeof(getIndexToIns([5, 3, 20, 3], 5)) === "number", "<code>getIndexToIns([5, 3, 20, 3], 5)</code> should return a number.");'
- text: '<code>getIndexToIns([2, 20, 10], 19)</code> должен возвращать <code>2</code> .'
testString: 'assert(getIndexToIns([2, 20, 10], 19) === 2, "<code>getIndexToIns([2, 20, 10], 19)</code> should return <code>2</code>.");'
- text: '<code>getIndexToIns([2, 20, 10], 19)</code> должен возвращать число.'
testString: 'assert(typeof(getIndexToIns([2, 20, 10], 19)) === "number", "<code>getIndexToIns([2, 20, 10], 19)</code> should return a number.");'
- text: '<code>getIndexToIns([2, 5, 10], 15)</code> должен вернуть <code>3</code> .'
testString: 'assert(getIndexToIns([2, 5, 10], 15) === 3, "<code>getIndexToIns([2, 5, 10], 15)</code> should return <code>3</code>.");'
- text: '<code>getIndexToIns([2, 5, 10], 15)</code> должен возвращать число.'
testString: 'assert(typeof(getIndexToIns([2, 5, 10], 15)) === "number", "<code>getIndexToIns([2, 5, 10], 15)</code> should return a number.");'
- text: '<code>getIndexToIns([], 1)</code> должен возвращать <code>0</code> .'
testString: 'assert(getIndexToIns([], 1) === 0, "<code>getIndexToIns([], 1)</code> should return <code>0</code>.");'
- text: '<code>getIndexToIns([], 1)</code> должен возвращать число.'
testString: 'assert(typeof(getIndexToIns([], 1)) === "number", "<code>getIndexToIns([], 1)</code> should return a number.");'
- text: <code>getIndexToIns([10, 20, 30, 40, 50], 35)</code> should return <code>3</code>.
testString: assert(getIndexToIns([10, 20, 30, 40, 50], 35) === 3);
- text: <code>getIndexToIns([10, 20, 30, 40, 50], 35)</code> should return a number.
testString: assert(typeof(getIndexToIns([10, 20, 30, 40, 50], 35)) === "number");
- text: <code>getIndexToIns([10, 20, 30, 40, 50], 30)</code> should return <code>2</code>.
testString: assert(getIndexToIns([10, 20, 30, 40, 50], 30) === 2);
- text: <code>getIndexToIns([10, 20, 30, 40, 50], 30)</code> should return a number.
testString: assert(typeof(getIndexToIns([10, 20, 30, 40, 50], 30)) === "number");
- text: <code>getIndexToIns([40, 60], 50)</code> should return <code>1</code>.
testString: assert(getIndexToIns([40, 60], 50) === 1);
- text: <code>getIndexToIns([40, 60], 50)</code> should return a number.
testString: assert(typeof(getIndexToIns([40, 60], 50)) === "number");
- text: <code>getIndexToIns([3, 10, 5], 3)</code> should return <code>0</code>.
testString: assert(getIndexToIns([3, 10, 5], 3) === 0);
- text: <code>getIndexToIns([3, 10, 5], 3)</code> should return a number.
testString: assert(typeof(getIndexToIns([3, 10, 5], 3)) === "number");
- text: <code>getIndexToIns([5, 3, 20, 3], 5)</code> should return <code>2</code>.
testString: assert(getIndexToIns([5, 3, 20, 3], 5) === 2);
- text: <code>getIndexToIns([5, 3, 20, 3], 5)</code> should return a number.
testString: assert(typeof(getIndexToIns([5, 3, 20, 3], 5)) === "number");
- text: <code>getIndexToIns([2, 20, 10], 19)</code> should return <code>2</code>.
testString: assert(getIndexToIns([2, 20, 10], 19) === 2);
- text: <code>getIndexToIns([2, 20, 10], 19)</code> should return a number.
testString: assert(typeof(getIndexToIns([2, 20, 10], 19)) === "number");
- text: <code>getIndexToIns([2, 5, 10], 15)</code> should return <code>3</code>.
testString: assert(getIndexToIns([2, 5, 10], 15) === 3);
- text: <code>getIndexToIns([2, 5, 10], 15)</code> should return a number.
testString: assert(typeof(getIndexToIns([2, 5, 10], 15)) === "number");
- text: <code>getIndexToIns([], 1)</code> should return <code>0</code>.
testString: assert(getIndexToIns([], 1) === 0);
- text: <code>getIndexToIns([], 1)</code> should return a number.
testString: assert(typeof(getIndexToIns([], 1)) === "number");
```
@@ -73,14 +76,25 @@ getIndexToIns([40, 60], 50);
</div>
</section>
## Solution
<section id='solution'>
```js
// solution required
function getIndexToIns(arr, num) {
arr = arr.sort((a, b) => a - b);
for (let i = 0; i < arr.length; i++) {
if (arr[i] >= num) {
return i;
}
}
return arr.length;
}
getIndexToIns([40, 60], 50);
```
</section>

View File

@@ -2,29 +2,33 @@
id: 5a661e0f1068aca922b3ef17
title: Access an Array's Contents Using Bracket Notation
challengeType: 1
videoUrl: ''
forumTopicId: 301149
localeTitle: Доступ к содержимому массива с использованием скобок
---
## Description
<section id="description"> Основополагающей особенностью любой структуры данных является, конечно же, способность не только хранить данные, но и получать эти данные по команде. Итак, теперь, когда мы научились создавать массив, давайте начнем думать о том, как мы можем получить доступ к информации этого массива. Когда мы определяем простой массив, как показано ниже, в нем есть 3 элемента: <blockquote> пусть ourArray = [&quot;a&quot;, &quot;b&quot;, &quot;c&quot;]; </blockquote> В массиве каждый элемент массива имеет <dfn>индекс</dfn> . Этот показатель удваивается как позиция этого элемента в массиве и как вы его ссылаетесь. Однако важно отметить, что массивы JavaScript <dfn>ноль-индексируются</dfn> , что означает, что первый элемент массива находится в <em><strong>нулевом</strong></em> положении, а не в первом. Чтобы получить элемент из массива, мы можем заключить индекс в скобки и добавить его в конец массива или, более часто, к переменной, которая ссылается на объект массива. Это называется <dfn>скобкой</dfn> . Например, если мы хотим получить <code>&quot;a&quot;</code> из <code>ourArray</code> и назначить его переменной, мы можем сделать это со следующим кодом: <blockquote> let ourVariable = ourArray [0]; <br> // ourVariable равно &quot;a&quot; </blockquote> Помимо доступа к значению, связанному с индексом, вы также можете <em>установить</em> индекс в значение с использованием той же записи: <blockquote> ourArray [1] = &quot;not b больше&quot;; <br> // ourArray теперь равен [&quot;a&quot;, &quot;not b больше&quot;, &quot;c&quot;]; </blockquote> Используя нотацию с помощью скобок, мы теперь перезагружаем элемент с индексом 1 от <code>&quot;b&quot;</code> , до <code>&quot;not b anymore&quot;</code> . </section>
<section id='description'>
Основополагающей особенностью любой структуры данных является, конечно же, способность не только хранить данные, но и получать эти данные по команде. Итак, теперь, когда мы научились создавать массив, давайте начнем думать о том, как мы можем получить доступ к информации этого массива. Когда мы определяем простой массив, как показано ниже, в нем есть 3 элемента: <blockquote> пусть ourArray = [&quot;a&quot;, &quot;b&quot;, &quot;c&quot;]; </blockquote> В массиве каждый элемент массива имеет <dfn>индекс</dfn> . Этот показатель удваивается как позиция этого элемента в массиве и как вы его ссылаетесь. Однако важно отметить, что массивы JavaScript <dfn>ноль-индексируются</dfn> , что означает, что первый элемент массива находится в <em><strong>нулевом</strong></em> положении, а не в первом. Чтобы получить элемент из массива, мы можем заключить индекс в скобки и добавить его в конец массива или, более часто, к переменной, которая ссылается на объект массива. Это называется <dfn>скобкой</dfn> . Например, если мы хотим получить <code>&quot;a&quot;</code> из <code>ourArray</code> и назначить его переменной, мы можем сделать это со следующим кодом: <blockquote> let ourVariable = ourArray [0]; <br> // ourVariable равно &quot;a&quot; </blockquote> Помимо доступа к значению, связанному с индексом, вы также можете <em>установить</em> индекс в значение с использованием той же записи: <blockquote> ourArray [1] = &quot;not b больше&quot;; <br> // ourArray теперь равен [&quot;a&quot;, &quot;not b больше&quot;, &quot;c&quot;]; </blockquote> Используя нотацию с помощью скобок, мы теперь перезагружаем элемент с индексом 1 от <code>&quot;b&quot;</code> , до <code>&quot;not b anymore&quot;</code> .
</section>
## Instructions
<section id="instructions"> Чтобы завершить эту задачу, установите вторую позицию (индекс <code>1</code> ) <code>myArray</code> на все, что вы хотите, помимо <code>&quot;b&quot;</code> . </section>
<section id='instructions'>
Чтобы завершить эту задачу, установите вторую позицию (индекс <code>1</code> ) <code>myArray</code> на все, что вы хотите, помимо <code>&quot;b&quot;</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: '<code>myArray[0]</code> равно <code>&quot;a&quot;</code>'
testString: 'assert.strictEqual(myArray[0], "a", "<code>myArray[0]</code> is equal to <code>"a"</code>");'
- text: '<code>myArray[1]</code> больше не установлен на <code>&quot;b&quot;</code>'
testString: 'assert.notStrictEqual(myArray[1], "b", "<code>myArray[1]</code> is no longer set to <code>"b"</code>");'
- text: '<code>myArray[2]</code> равен <code>&quot;c&quot;</code>'
testString: 'assert.strictEqual(myArray[2], "c", "<code>myArray[2]</code> is equal to <code>"c"</code>");'
- text: ''
testString: 'assert.strictEqual(myArray[3], "d", "<code>myArray[3]</code> is equal to <code>"d"</code>");'
- text: <code>myArray[0]</code> is equal to <code>"a"</code>
testString: assert.strictEqual(myArray[0], "a");
- text: <code>myArray[1]</code> is no longer set to <code>"b"</code>
testString: assert.notStrictEqual(myArray[1], "b");
- text: <code>myArray[2]</code> is equal to <code>"c"</code>
testString: assert.strictEqual(myArray[2], "c");
- text: <code>myArray[3]</code> is equal to <code>"d"</code>
testString: assert.strictEqual(myArray[3], "d");
```
@@ -46,8 +50,6 @@ console.log(myArray);
</div>
</section>
## Solution
@@ -55,5 +57,8 @@ console.log(myArray);
```js
// solution required
let myArray = ["a", "b", "c", "d"];
myArray[1] = "e";
```
</section>

View File

@@ -2,31 +2,35 @@
id: 587d7b7c367417b2b2512b1a
title: Access Property Names with Bracket Notation
challengeType: 1
videoUrl: ''
forumTopicId: 301150
localeTitle: Доступ к именам объектов с обозначением скобок
---
## Description
<section id="description"> В первом вызове объекта мы упоминали использование нотации в виде скобок как способ доступа к значениям свойств с использованием оценки переменной. Например, представьте, что наш <code>foods</code> объект используется в программе для кассового аппарата супермаркета. У нас есть функция , которая устанавливает <code>selectedFood</code> и мы хотим , чтобы проверить наши <code>foods</code> объекта на наличие этой пищи. Это может выглядеть так: <blockquote> let selectedFood = getCurrentFood (scannedItem); <br> пусть инвентарь = продукты питания [selectedFood]; </blockquote> Этот код будет оценивать значение, хранящееся в переменной <code>selectedFood</code> и возвращать значение этого ключа в файле <code>foods</code> или <code>undefined</code> если оно отсутствует. Обозначение скобок очень полезно, поскольку иногда свойства объекта неизвестны до выполнения, или нам нужно получить доступ к ним более динамичным способом. </section>
<section id='description'>
В первом вызове объекта мы упоминали использование нотации в виде скобок как способ доступа к значениям свойств с использованием оценки переменной. Например, представьте, что наш <code>foods</code> объект используется в программе для кассового аппарата супермаркета. У нас есть функция , которая устанавливает <code>selectedFood</code> и мы хотим , чтобы проверить наши <code>foods</code> объекта на наличие этой пищи. Это может выглядеть так: <blockquote> let selectedFood = getCurrentFood (scannedItem); <br> пусть инвентарь = продукты питания [selectedFood]; </blockquote> Этот код будет оценивать значение, хранящееся в переменной <code>selectedFood</code> и возвращать значение этого ключа в файле <code>foods</code> или <code>undefined</code> если оно отсутствует. Обозначение скобок очень полезно, поскольку иногда свойства объекта неизвестны до выполнения, или нам нужно получить доступ к ним более динамичным способом.
</section>
## Instructions
<section id="instructions"> Мы определили функцию <code>checkInventory</code> , которая получает отсканированный элемент в качестве аргумента. Верните текущее значение ключа <code>scannedItem</code> в объект <code>foods</code> . Вы можете предположить, что в качестве аргумента для <code>checkInventory</code> будут предоставлены только действительные ключи. </section>
<section id='instructions'>
Мы определили функцию <code>checkInventory</code> , которая получает отсканированный элемент в качестве аргумента. Верните текущее значение ключа <code>scannedItem</code> в объект <code>foods</code> . Вы можете предположить, что в качестве аргумента для <code>checkInventory</code> будут предоставлены только действительные ключи.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>checkInventory</code> - это функция
testString: 'assert.strictEqual(typeof checkInventory, "function", "<code>checkInventory</code> is a function");'
- text: 'Объект <code>foods</code> должен иметь только следующие пары ключ-значение: <code>apples: 25</code> , <code>oranges: 32</code> , <code>plums: 28</code> , <code>bananas: 13</code> , <code>grapes: 35</code> , <code>strawberries: 27</code>'
testString: 'assert.deepEqual(foods, {apples: 25, oranges: 32, plums: 28, bananas: 13, grapes: 35, strawberries: 27}, "The <code>foods</code> object should have only the following key-value pairs: <code>apples: 25</code>, <code>oranges: 32</code>, <code>plums: 28</code>, <code>bananas: 13</code>, <code>grapes: 35</code>, <code>strawberries: 27</code>");'
- text: <code>checkInventory(&quot;apples&quot;)</code> должен вернуть <code>25</code>
testString: 'assert.strictEqual(checkInventory("apples"), 25, "<code>checkInventory("apples")</code> should return <code>25</code>");'
- text: <code>checkInventory(&quot;bananas&quot;)</code> должен вернуть <code>13</code>
testString: 'assert.strictEqual(checkInventory("bananas"), 13, "<code>checkInventory("bananas")</code> should return <code>13</code>");'
- text: <code>checkInventory(&quot;strawberries&quot;)</code> должна вернуть <code>27</code>
testString: 'assert.strictEqual(checkInventory("strawberries"), 27, "<code>checkInventory("strawberries")</code> should return <code>27</code>");'
- text: <code>checkInventory</code> is a function
testString: assert.strictEqual(typeof checkInventory, 'function');
- text: 'The <code>foods</code> object should have only the following key-value pairs: <code>apples: 25</code>, <code>oranges: 32</code>, <code>plums: 28</code>, <code>bananas: 13</code>, <code>grapes: 35</code>, <code>strawberries: 27</code>'
testString: 'assert.deepEqual(foods, {apples: 25, oranges: 32, plums: 28, bananas: 13, grapes: 35, strawberries: 27});'
- text: <code>checkInventory("apples")</code> should return <code>25</code>
testString: assert.strictEqual(checkInventory('apples'), 25);
- text: <code>checkInventory("bananas")</code> should return <code>13</code>
testString: assert.strictEqual(checkInventory('bananas'), 13);
- text: <code>checkInventory("strawberries")</code> should return <code>27</code>
testString: assert.strictEqual(checkInventory('strawberries'), 27);
```
@@ -60,8 +64,6 @@ console.log(checkInventory("apples"));
</div>
</section>
## Solution
@@ -69,5 +71,18 @@ console.log(checkInventory("apples"));
```js
// solution required
let foods = {
apples: 25,
oranges: 32,
plums: 28,
bananas: 13,
grapes: 35,
strawberries: 27
};
function checkInventory(scannedItem) {
return foods[scannedItem];
}
```
</section>

View File

@@ -2,27 +2,31 @@
id: 587d78b2367417b2b2512b0e
title: Add Items to an Array with push() and unshift()
challengeType: 1
videoUrl: ''
forumTopicId: 301151
localeTitle: Добавление элементов в массив с помощью push () и unshift ()
---
## Description
<section id="description"> Длина массива, как и типы данных, которые она может содержать, не является фиксированной. Массивы могут быть определены с длиной любого количества элементов, и элементы могут быть добавлены или удалены с течением времени; другими словами, массивы являются <dfn>изменяемыми</dfn> . В этой задаче мы рассмотрим два метода, с помощью которых мы можем программным образом модифицировать массив: <code>Array.push()</code> и <code>Array.unshift()</code> . Оба метода принимают один или несколько элементов в качестве параметров и добавляют эти элементы в массив, на который вызывается метод; метод <code>push()</code> добавляет элементы в конец массива, а <code>unshift()</code> добавляет элементы в начало. Рассмотрим следующее: <blockquote> пусть двадцать Три = &#39;XXIII&#39;; <br> let romanNumerals = [&#39;XXI&#39;, &#39;XXII&#39;]; <br><br> romanNumerals.unshift (&#39;XIX&#39;, &#39;XX&#39;); <br> // теперь равно [&#39;XIX&#39;, &#39;XX&#39;, &#39;XXI&#39;, &#39;XXII&#39;] <br><br> romanNumerals.push (twentyThree); <br> // теперь равно [&#39;XIX&#39;, &#39;XX&#39;, &#39;XXI&#39;, &#39;XXII&#39;, &#39;XXIII&#39;] Обратите внимание, что мы также можем передавать переменные, что позволяет нам еще большую гибкость в динамическом изменении данных нашего массива. </blockquote></section>
<section id='description'>
Длина массива, как и типы данных, которые она может содержать, не является фиксированной. Массивы могут быть определены с длиной любого количества элементов, и элементы могут быть добавлены или удалены с течением времени; другими словами, массивы являются <dfn>изменяемыми</dfn> . В этой задаче мы рассмотрим два метода, с помощью которых мы можем программным образом модифицировать массив: <code>Array.push()</code> и <code>Array.unshift()</code> . Оба метода принимают один или несколько элементов в качестве параметров и добавляют эти элементы в массив, на который вызывается метод; метод <code>push()</code> добавляет элементы в конец массива, а <code>unshift()</code> добавляет элементы в начало. Рассмотрим следующее: <blockquote> пусть двадцать Три = &#39;XXIII&#39;; <br> let romanNumerals = [&#39;XXI&#39;, &#39;XXII&#39;]; <br><br> romanNumerals.unshift (&#39;XIX&#39;, &#39;XX&#39;); <br> // теперь равно [&#39;XIX&#39;, &#39;XX&#39;, &#39;XXI&#39;, &#39;XXII&#39;] <br><br> romanNumerals.push (twentyThree); <br> // теперь равно [&#39;XIX&#39;, &#39;XX&#39;, &#39;XXI&#39;, &#39;XXII&#39;, &#39;XXIII&#39;] Обратите внимание, что мы также можем передавать переменные, что позволяет нам еще большую гибкость в динамическом изменении данных нашего массива. </blockquote>
</section>
## Instructions
<section id="instructions"> Мы определили функцию, <code>mixedNumbers</code> , которую мы передаем массивом в качестве аргумента. Измените функцию, используя <code>push()</code> и <code>unshift()</code> чтобы добавить <code>&#39;I&#39;, 2, &#39;three&#39;</code> в начало массива и <code>7, &#39;VIII&#39;, 9</code> до конца, чтобы возвращаемый массив содержал представления чисел 1-9 в порядке. </section>
<section id='instructions'>
Мы определили функцию, <code>mixedNumbers</code> , которую мы передаем массивом в качестве аргумента. Измените функцию, используя <code>push()</code> и <code>unshift()</code> чтобы добавить <code>&#39;I&#39;, 2, &#39;three&#39;</code> в начало массива и <code>7, &#39;VIII&#39;, 9</code> до конца, чтобы возвращаемый массив содержал представления чисел 1-9 в порядке.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: '<code>mixedNumbers([&quot;IV&quot;, 5, &quot;six&quot;])</code> должны теперь возвращаться <code>[&quot;I&quot;, 2, &quot;three&quot;, &quot;IV&quot;, 5, &quot;six&quot;, 7, &quot;VIII&quot;, 9]</code>'
testString: 'assert.deepEqual(mixedNumbers(["IV", 5, "six"]), ["I", 2, "three", "IV", 5, "six", 7, "VIII", 9], "<code>mixedNumbers(["IV", 5, "six"])</code> should now return <code>["I", 2, "three", "IV", 5, "six", 7, "VIII", 9]</code>");'
- text: Функция <code>mixedNumbers</code> должна использовать метод <code>push()</code>
testString: 'assert.notStrictEqual(mixedNumbers.toString().search(/\.push\(/), -1, "The <code>mixedNumbers</code> function should utilize the <code>push()</code> method");'
- text: Функция <code>mixedNumbers</code> должна использовать метод <code>unshift()</code>
testString: 'assert.notStrictEqual(mixedNumbers.toString().search(/\.unshift\(/), -1, "The <code>mixedNumbers</code> function should utilize the <code>unshift()</code> method");'
- text: <code>mixedNumbers(["IV", 5, "six"])</code> should now return <code>["I", 2, "three", "IV", 5, "six", 7, "VIII", 9]</code>
testString: assert.deepEqual(mixedNumbers(['IV', 5, 'six']), ['I', 2, 'three', 'IV', 5, 'six', 7, 'VIII', 9]);
- text: The <code>mixedNumbers</code> function should utilize the <code>push()</code> method
testString: assert(mixedNumbers.toString().match(/\.push/));
- text: The <code>mixedNumbers</code> function should utilize the <code>unshift()</code> method
testString: assert(mixedNumbers.toString().match(/\.unshift/));
```
@@ -48,14 +52,19 @@ console.log(mixedNumbers(['IV', 5, 'six']));
</div>
</section>
## Solution
<section id='solution'>
```js
// solution required
function mixedNumbers(arr) {
// change code below this line
arr.push(7,'VIII',9);
arr.unshift('I',2,'three');
// change code above this line
return arr;
}
```
</section>

View File

@@ -2,29 +2,33 @@
id: 587d78b3367417b2b2512b11
title: Add Items Using splice()
challengeType: 1
videoUrl: ''
forumTopicId: 301152
localeTitle: Добавление элементов с помощью splice ()
---
## Description
<section id="description"> Помните, что в последнем вызове мы упоминали, что <code>splice()</code> может принимать до трех параметров? Ну, мы можем сделать еще один шаг с помощью <code>splice()</code> - в дополнение к удалению элементов, мы можем использовать этот третий параметр, который представляет один или несколько элементов, чтобы <em>добавить</em> их также. Это может быть невероятно полезно для быстрого переключения элемента или набора элементов для другого. Например, предположим, что вы храните цветовую схему для набора элементов DOM в массиве и хотите динамически изменять цвет на основе некоторых действий: <blockquote> function colorChange (arr, index, newColor) { <br> arr.splice (индекс, 1, newColor); <br> return arr; <br> } <br><br> let colorScheme = [&#39;# 878787&#39;, &#39;# a08794&#39;, &#39;# bb7e8c&#39;, &#39;# c9b6be&#39;, &#39;# d1becf&#39;]; <br><br> colorScheme = colorChange (colorScheme, 2, &#39;# 332327&#39;); <br> // мы удалили &#39;# bb7e8c&#39; и добавили &#39;# 332327&#39; на свое место <br> // colorScheme теперь равно [&#39;# 878787&#39;, &#39;# a08794&#39;, &#39;# 332327&#39;, &#39;# c9b6be&#39;, &#39;# d1becf&#39;] </blockquote> Эта функция принимает массив шестнадцатеричных значений, индекс, с которого нужно удалить элемент, и новый цвет для замены удаленного элемента. Возвращаемое значение представляет собой массив, содержащий новую измененную цветовую схему! Хотя этот пример немного упрощен, мы можем видеть, что значение, использующее <code>splice()</code> может иметь максимальный потенциал. </section>
<section id='description'>
Помните, что в последнем вызове мы упоминали, что <code>splice()</code> может принимать до трех параметров? Ну, мы можем сделать еще один шаг с помощью <code>splice()</code> - в дополнение к удалению элементов, мы можем использовать этот третий параметр, который представляет один или несколько элементов, чтобы <em>добавить</em> их также. Это может быть невероятно полезно для быстрого переключения элемента или набора элементов для другого. Например, предположим, что вы храните цветовую схему для набора элементов DOM в массиве и хотите динамически изменять цвет на основе некоторых действий: <blockquote> function colorChange (arr, index, newColor) { <br> arr.splice (индекс, 1, newColor); <br> return arr; <br> } <br><br> let colorScheme = [&#39;# 878787&#39;, &#39;# a08794&#39;, &#39;# bb7e8c&#39;, &#39;# c9b6be&#39;, &#39;# d1becf&#39;]; <br><br> colorScheme = colorChange (colorScheme, 2, &#39;# 332327&#39;); <br> // мы удалили &#39;# bb7e8c&#39; и добавили &#39;# 332327&#39; на свое место <br> // colorScheme теперь равно [&#39;# 878787&#39;, &#39;# a08794&#39;, &#39;# 332327&#39;, &#39;# c9b6be&#39;, &#39;# d1becf&#39;] </blockquote> Эта функция принимает массив шестнадцатеричных значений, индекс, с которого нужно удалить элемент, и новый цвет для замены удаленного элемента. Возвращаемое значение представляет собой массив, содержащий новую измененную цветовую схему! Хотя этот пример немного упрощен, мы можем видеть, что значение, использующее <code>splice()</code> может иметь максимальный потенциал.
</section>
## Instructions
<section id="instructions"> Мы определили функцию <code>htmlColorNames</code> , которая принимает в качестве аргумента массив цветов HTML. Измените функцию с помощью <code>splice()</code> чтобы удалить первые два элемента массива и добавить <code>&#39;DarkSalmon&#39;</code> и <code>&#39;BlanchedAlmond&#39;</code> в соответствующие места. </section>
<section id='instructions'>
Мы определили функцию <code>htmlColorNames</code> , которая принимает в качестве аргумента массив цветов HTML. Измените функцию с помощью <code>splice()</code> чтобы удалить первые два элемента массива и добавить <code>&#39;DarkSalmon&#39;</code> и <code>&#39;BlanchedAlmond&#39;</code> в соответствующие места.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: '<code>htmlColorNames</code> должны возвращать <code>[&quot;DarkSalmon&quot;, &quot;BlanchedAlmond&quot;, &quot;LavenderBlush&quot;, &quot;PaleTurqoise&quot;, &quot;FireBrick&quot;]</code>'
testString: 'assert.deepEqual(htmlColorNames(["DarkGoldenRod", "WhiteSmoke", "LavenderBlush", "PaleTurqoise", "FireBrick"]), ["DarkSalmon", "BlanchedAlmond", "LavenderBlush", "PaleTurqoise", "FireBrick"], "<code>htmlColorNames</code> should return <code>["DarkSalmon", "BlanchedAlmond", "LavenderBlush", "PaleTurqoise", "FireBrick"]</code>");'
- text: Функция <code>htmlColorNames</code> должна использовать метод <code>splice()</code>
testString: 'assert(/.splice/.test(code), "The <code>htmlColorNames</code> function should utilize the <code>splice()</code> method");'
- text: Вы не должны использовать <code>shift()</code> или <code>unshift()</code> .
testString: 'assert(!/shift|unshift/.test(code), "You should not use <code>shift()</code> or <code>unshift()</code>.");'
- text: Не следует использовать нотацию массива.
testString: 'assert(!/\[\d\]\s*=/.test(code), "You should not use array bracket notation.");'
- text: <code>htmlColorNames</code> should return <code>["DarkSalmon", "BlanchedAlmond", "LavenderBlush", "PaleTurqoise", "FireBrick"]</code>
testString: assert.deepEqual(htmlColorNames(['DarkGoldenRod', 'WhiteSmoke', 'LavenderBlush', 'PaleTurqoise', 'FireBrick']), ['DarkSalmon', 'BlanchedAlmond', 'LavenderBlush', 'PaleTurqoise', 'FireBrick']);
- text: The <code>htmlColorNames</code> function should utilize the <code>splice()</code> method
testString: assert(/.splice/.test(code));
- text: You should not use <code>shift()</code> or <code>unshift()</code>.
testString: assert(!/shift|unshift/.test(code));
- text: You should not use array bracket notation.
testString: assert(!/\[\d\]\s*=/.test(code));
```
@@ -50,14 +54,16 @@ console.log(htmlColorNames(['DarkGoldenRod', 'WhiteSmoke', 'LavenderBlush', 'Pal
</div>
</section>
## Solution
<section id='solution'>
```js
// solution required
function htmlColorNames(arr) {
arr.splice(0,2,'DarkSalmon', 'BlanchedAlmond');
return arr;
}
```
</section>

View File

@@ -2,31 +2,35 @@
id: 587d7b7c367417b2b2512b18
title: Add Key-Value Pairs to JavaScript Objects
challengeType: 1
videoUrl: ''
forumTopicId: 301153
localeTitle: Добавление пар ключей к объектам JavaScript
---
## Description
<section id="description"> В большинстве своих объектов объекты представляют собой только коллекции <dfn>пар ключ-значение</dfn> , или, другими словами, части данных, сопоставленные с уникальными идентификаторами, которые мы называем <dfn>свойствами</dfn> или <dfn>ключами</dfn> . Давайте рассмотрим очень простой пример: <blockquote> пусть FCC_User = { <br> имя пользователя: &#39;awesome_coder&#39;, <br> последователи: 572, <br> баллы: 1741, <br> completedProjects: 15 <br> }; </blockquote> Вышеприведенный код определяет объект с именем <code>FCC_User</code> который имеет четыре <dfn>свойства</dfn> , каждый из которых соответствует определенному значению. Если бы мы хотели узнать количество <code>followers</code> <code>FCC_User</code> , мы можем получить доступ к этому свойству, написав: <blockquote> let userData = FCC_User.followers; <br> // userData равно 572 </blockquote> Это называется <dfn>точечной нотации</dfn> . Кроме того, мы также можем получить доступ к свойству с помощью скобок, например: <blockquote> let userData = FCC_User [&#39;followers&#39;] <br> // userData равно 572 </blockquote> Обратите внимание, что с <dfn>обозначением в скобках</dfn> мы заключили <code>followers</code> в кавычки. Это связано с тем, что скобки фактически позволяют нам передавать переменную in, которая будет оцениваться как имя свойства (подсказка: помните об этом позже!). Если бы мы передали <code>followers</code> без кавычек, движок JavaScript попытался бы оценить его как переменную, и <code>ReferenceError: followers is not defined</code> был бы указан идентификатор <code>ReferenceError: followers is not defined</code> . </section>
<section id='description'>
В большинстве своих объектов объекты представляют собой только коллекции <dfn>пар ключ-значение</dfn> , или, другими словами, части данных, сопоставленные с уникальными идентификаторами, которые мы называем <dfn>свойствами</dfn> или <dfn>ключами</dfn> . Давайте рассмотрим очень простой пример: <blockquote> пусть FCC_User = { <br> имя пользователя: &#39;awesome_coder&#39;, <br> последователи: 572, <br> баллы: 1741, <br> completedProjects: 15 <br> }; </blockquote> Вышеприведенный код определяет объект с именем <code>FCC_User</code> который имеет четыре <dfn>свойства</dfn> , каждый из которых соответствует определенному значению. Если бы мы хотели узнать количество <code>followers</code> <code>FCC_User</code> , мы можем получить доступ к этому свойству, написав: <blockquote> let userData = FCC_User.followers; <br> // userData равно 572 </blockquote> Это называется <dfn>точечной нотации</dfn> . Кроме того, мы также можем получить доступ к свойству с помощью скобок, например: <blockquote> let userData = FCC_User [&#39;followers&#39;] <br> // userData равно 572 </blockquote> Обратите внимание, что с <dfn>обозначением в скобках</dfn> мы заключили <code>followers</code> в кавычки. Это связано с тем, что скобки фактически позволяют нам передавать переменную in, которая будет оцениваться как имя свойства (подсказка: помните об этом позже!). Если бы мы передали <code>followers</code> без кавычек, движок JavaScript попытался бы оценить его как переменную, и <code>ReferenceError: followers is not defined</code> был бы указан идентификатор <code>ReferenceError: followers is not defined</code> .
</section>
## Instructions
<section id="instructions"> Используя тот же синтаксис, мы можем также <em><strong>добавить новые</strong></em> пары ключ-значение в объекты. Мы создали объект для <code>foods</code> с тремя записями. Добавьте еще три записи: <code>bananas</code> со значением <code>13</code> , <code>grapes</code> со значением <code>35</code> и <code>strawberries</code> со значением <code>27</code> . </section>
<section id='instructions'>
Используя тот же синтаксис, мы можем также <em><strong>добавить новые</strong></em> пары ключ-значение в объекты. Мы создали объект для <code>foods</code> с тремя записями. Добавьте еще три записи: <code>bananas</code> со значением <code>13</code> , <code>grapes</code> со значением <code>35</code> и <code>strawberries</code> со значением <code>27</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: ''
testString: 'assert(typeof foods === "object", "<code>foods</code> is an object");'
- text: ''
testString: 'assert(foods.bananas === 13, "The <code>foods</code> object has a key <code>"bananas"</code> with a value of <code>13</code>");'
- text: Объект <code>foods</code> имеет ключевой <code>&quot;grapes&quot;</code> со значением <code>35</code>
testString: 'assert(foods.grapes === 35, "The <code>foods</code> object has a key <code>"grapes"</code> with a value of <code>35</code>");'
- text: ''
testString: 'assert(foods.strawberries === 27, "The <code>foods</code> object has a key <code>"strawberries"</code> with a value of <code>27</code>");'
- text: ''
testString: 'assert(code.search(/bananas:/) === -1 && code.search(/grapes:/) === -1 && code.search(/strawberries:/) === -1, "The key-value pairs should be set using dot or bracket notation");'
- text: <code>foods</code> is an object
testString: assert(typeof foods === 'object');
- text: The <code>foods</code> object has a key <code>"bananas"</code> with a value of <code>13</code>
testString: assert(foods.bananas === 13);
- text: The <code>foods</code> object has a key <code>"grapes"</code> with a value of <code>35</code>
testString: assert(foods.grapes === 35);
- text: The <code>foods</code> object has a key <code>"strawberries"</code> with a value of <code>27</code>
testString: assert(foods.strawberries === 27);
- text: The key-value pairs should be set using dot or bracket notation
testString: assert(code.search(/bananas:/) === -1 && code.search(/grapes:/) === -1 && code.search(/strawberries:/) === -1);
```
@@ -54,14 +58,23 @@ console.log(foods);
</div>
</section>
## Solution
<section id='solution'>
```js
// solution required
let foods = {
apples: 25,
oranges: 32,
plums: 28
};
// change code below this line
foods['bananas'] = 13;
foods['grapes'] = 35;
foods['strawberries'] = 27;
// change code above this line
```
</section>

View File

@@ -2,31 +2,35 @@
id: 587d7b7b367417b2b2512b14
title: Check For The Presence of an Element With indexOf()
challengeType: 1
videoUrl: ''
forumTopicId: 301154
localeTitle: Проверка наличия элемента с помощью indexOf ()
---
## Description
<section id="description"> Так как массивы могут быть изменены, или <em>мутировали,</em> в любое время, нет никакой гарантии , о том, где определенная часть данных будет находиться на данном массиве, или если этот элемент даже до сих пор существует. К счастью, JavaScript предоставляет нам еще один встроенный метод, <code>indexOf()</code> , который позволяет нам быстро и легко проверить наличие элемента в массиве. <code>indexOf()</code> принимает элемент как параметр, а при вызове возвращает позицию или индекс этого элемента или <code>-1</code> если элемент не существует в массиве. Например: <blockquote> пусть плоды = [&#39;яблоки, груши, апельсины, персики, груши; <br><br> fruit.indexOf (&#39;date&#39;) // возвращает -1 <br> fruit.indexOf (&#39;апельсины&#39;) // возвращает 2 <br> fruit.indexOf (&#39;pears&#39;) // возвращает 1, первый индекс, в котором существует элемент </blockquote></section>
<section id='description'>
Так как массивы могут быть изменены, или <em>мутировали,</em> в любое время, нет никакой гарантии , о том, где определенная часть данных будет находиться на данном массиве, или если этот элемент даже до сих пор существует. К счастью, JavaScript предоставляет нам еще один встроенный метод, <code>indexOf()</code> , который позволяет нам быстро и легко проверить наличие элемента в массиве. <code>indexOf()</code> принимает элемент как параметр, а при вызове возвращает позицию или индекс этого элемента или <code>-1</code> если элемент не существует в массиве. Например: <blockquote> пусть плоды = [&#39;яблоки, груши, апельсины, персики, груши; <br><br> fruit.indexOf (&#39;date&#39;) // возвращает -1 <br> fruit.indexOf (&#39;апельсины&#39;) // возвращает 2 <br> fruit.indexOf (&#39;pears&#39;) // возвращает 1, первый индекс, в котором существует элемент </blockquote>
</section>
## Instructions
<section id="instructions"> <code>indexOf()</code> может быть невероятно полезен для быстрой проверки наличия элемента в массиве. Мы определили функцию <code>quickCheck</code> , которая принимает в качестве аргумента массив и элемент. Измените функцию, используя <code>indexOf()</code> чтобы она возвращала значение <code>true</code> если переданный элемент существует в массиве, а <code>false</code> если это не так. </section>
<section id='instructions'>
<code>indexOf()</code> может быть невероятно полезен для быстрой проверки наличия элемента в массиве. Мы определили функцию <code>quickCheck</code> , которая принимает в качестве аргумента массив и элемент. Измените функцию, используя <code>indexOf()</code> чтобы она возвращала значение <code>true</code> если переданный элемент существует в массиве, а <code>false</code> если это не так.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: '<code>quickCheck([&quot;squash&quot;, &quot;onions&quot;, &quot;shallots&quot;], &quot;mushrooms&quot;)</code> должны возвращать <code>false</code>'
testString: 'assert.strictEqual(quickCheck(["squash", "onions", "shallots"], "mushrooms"), false, "<code>quickCheck(["squash", "onions", "shallots"], "mushrooms")</code> should return <code>false</code>");'
- text: '<code>quickCheck([&quot;squash&quot;, &quot;onions&quot;, &quot;shallots&quot;], &quot;onions&quot;)</code> должен возвращать <code>true</code>'
testString: 'assert.strictEqual(quickCheck(["squash", "onions", "shallots"], "onions"), true, "<code>quickCheck(["squash", "onions", "shallots"], "onions")</code> should return <code>true</code>");'
- text: '<code>quickCheck([3, 5, 9, 125, 45, 2], 125)</code> должен возвращать <code>true</code>'
testString: 'assert.strictEqual(quickCheck([3, 5, 9, 125, 45, 2], 125), true, "<code>quickCheck([3, 5, 9, 125, 45, 2], 125)</code> should return <code>true</code>");'
- text: '<code>quickCheck([true, false, false], undefined)</code> должен возвращать <code>false</code>'
testString: 'assert.strictEqual(quickCheck([true, false, false], undefined), false, "<code>quickCheck([true, false, false], undefined)</code> should return <code>false</code>");'
- text: Функция <code>quickCheck</code> должна использовать метод <code>indexOf()</code>
testString: 'assert.notStrictEqual(quickCheck.toString().search(/\.indexOf\(/), -1, "The <code>quickCheck</code> function should utilize the <code>indexOf()</code> method");'
- text: <code>quickCheck(["squash", "onions", "shallots"], "mushrooms")</code> should return <code>false</code>
testString: assert.strictEqual(quickCheck(['squash', 'onions', 'shallots'], 'mushrooms'), false);
- text: <code>quickCheck(["onions", "squash", "shallots"], "onions")</code> should return <code>true</code>
testString: assert.strictEqual(quickCheck(['onions', 'squash', 'shallots'], 'onions'), true);
- text: <code>quickCheck([3, 5, 9, 125, 45, 2], 125)</code> should return <code>true</code>
testString: assert.strictEqual(quickCheck([3, 5, 9, 125, 45, 2], 125), true);
- text: <code>quickCheck([true, false, false], undefined)</code> should return <code>false</code>
testString: assert.strictEqual(quickCheck([true, false, false], undefined), false);
- text: The <code>quickCheck</code> function should utilize the <code>indexOf()</code> method
testString: assert.notStrictEqual(quickCheck.toString().search(/\.indexOf\(/), -1);
```
@@ -51,14 +55,17 @@ console.log(quickCheck(['squash', 'onions', 'shallots'], 'mushrooms'));
</div>
</section>
## Solution
<section id='solution'>
```js
// solution required
function quickCheck(arr, elem) {
// change code below this line
return arr.indexOf(elem) >= 0;
// change code above this line
}
```
</section>

View File

@@ -2,27 +2,37 @@
id: 587d7b7d367417b2b2512b1c
title: Check if an Object has a Property
challengeType: 1
videoUrl: ''
localeTitle: 'Проверьте, имеет ли объект свойство'
forumTopicId: 301155
localeTitle: Проверьте, имеет ли объект свойство
---
## Description
<section id="description"> Теперь мы можем добавлять, изменять и удалять ключи из объектов. Но что, если мы просто хотим узнать, обладает ли объект конкретным свойством? JavaScript предоставляет нам два разных способа сделать это. Один использует <code>hasOwnProperty()</code> метод , а другой использует <code>in</code> ключевом слове. Если у нас есть объектные <code>users</code> с собственностью <code>Alan</code> , мы можем проверить его наличие одним из следующих способов: <blockquote> users.hasOwnProperty ( &#39;Алан&#39;); <br> «Алан» у пользователей; <br> // оба возвращают true </blockquote></section>
<section id='description'>
Теперь мы можем добавлять, изменять и удалять ключи из объектов. Но что, если мы просто хотим узнать, обладает ли объект конкретным свойством? JavaScript предоставляет нам два разных способа сделать это. Один использует <code>hasOwnProperty()</code> метод , а другой использует <code>in</code> ключевом слове. Если у нас есть объектные <code>users</code> с собственностью <code>Alan</code> , мы можем проверить его наличие одним из следующих способов: <blockquote> users.hasOwnProperty ( &#39;Алан&#39;); <br> «Алан» у пользователей; <br> // оба возвращают true </blockquote>
</section>
## Instructions
<section id="instructions"> Мы создали объект, <code>users</code> , с некоторыми пользователями в нем, а функция <code>isEveryoneHere</code> , которую мы передаем объекту <code>users</code> в качестве аргумента. Завершите запись этой функции, чтобы она возвращала значение <code>true</code> только если объект <code>users</code> содержит все четыре имени: <code>Alan</code> , <code>Jeff</code> , <code>Sarah</code> и <code>Ryan</code> , как ключи, и <code>false</code> противном случае. </section>
<section id='instructions'>
Мы создали объект, <code>users</code> , с некоторыми пользователями в нем, а функция <code>isEveryoneHere</code> , которую мы передаем объекту <code>users</code> в качестве аргумента. Завершите запись этой функции, чтобы она возвращала значение <code>true</code> только если объект <code>users</code> содержит все четыре имени: <code>Alan</code> , <code>Jeff</code> , <code>Sarah</code> и <code>Ryan</code> , как ключи, и <code>false</code> противном случае.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: 'Объект <code>users</code> содержит только ключи <code>Alan</code> , <code>Jeff</code> , <code>Sarah</code> и <code>Ryan</code>'
testString: 'assert("Alan" in users && "Jeff" in users && "Sarah" in users && "Ryan" in users && Object.keys(users).length === 4, "The <code>users</code> object only contains the keys <code>Alan</code>, <code>Jeff</code>, <code>Sarah</code>, and <code>Ryan</code>");'
- text: 'Функция <code>isEveryoneHere</code> возвращает <code>true</code> если <code>Alan</code> , <code>Jeff</code> , <code>Sarah</code> и <code>Ryan</code> являются свойствами объекта <code>users</code>'
testString: 'assert(isEveryoneHere(users) === true, "The function <code>isEveryoneHere</code> returns <code>true</code> if <code>Alan</code>, <code>Jeff</code>, <code>Sarah</code>, and <code>Ryan</code> are properties on the <code>users</code> object");'
- text: 'Функция <code>isEveryoneHere</code> возвращает <code>false</code> если <code>Alan</code> , <code>Jeff</code> , <code>Sarah</code> и <code>Ryan</code> не являются объектами объекта <code>users</code>'
testString: 'assert((function() { delete users.Alan; delete users.Jeff; delete users.Sarah; delete users.Ryan; return isEveryoneHere(users) })() === false, "The function <code>isEveryoneHere</code> returns <code>false</code> if <code>Alan</code>, <code>Jeff</code>, <code>Sarah</code>, and <code>Ryan</code> are not properties on the <code>users</code> object");'
- text: The <code>users</code> object should only contain the keys <code>Alan</code>, <code>Jeff</code>, <code>Sarah</code>, and <code>Ryan</code>
testString: assert("Alan" in users && "Jeff" in users && "Sarah" in users && "Ryan" in users && Object.keys(users).length === 4);
- text: The function <code>isEveryoneHere</code> should return <code>true</code> if <code>Alan</code>, <code>Jeff</code>, <code>Sarah</code>, and <code>Ryan</code> are properties on the <code>users</code> object
testString: assert(isEveryoneHere(users) === true);
- text: The function <code>isEveryoneHere</code> should return <code>false</code> if <code>Alan</code> is not a property on the <code>users</code> object
testString: assert((function() { delete users.Alan; return isEveryoneHere(users) })() === false);
- text: The function <code>isEveryoneHere</code> should return <code>false</code> if <code>Jeff</code> is not a property on the <code>users</code> object
testString: assert((function() { delete users.Jeff; return isEveryoneHere(users) })() === false);
- text: The function <code>isEveryoneHere</code> should return <code>false</code> if <code>Sarah</code> is not a property on the <code>users</code> object
testString: assert((function() { delete users.Sarah; return isEveryoneHere(users) })() === false);
- text: The function <code>isEveryoneHere</code> should return <code>false</code> if <code>Ryan</code> is not a property on the <code>users</code> object
testString: assert((function() { delete users.Ryan; return isEveryoneHere(users) })() === false);
```
@@ -65,14 +75,41 @@ console.log(isEveryoneHere(users));
</div>
</section>
## Solution
<section id='solution'>
```js
// solution required
let users = {
Alan: {
age: 27,
online: true
},
Jeff: {
age: 32,
online: true
},
Sarah: {
age: 48,
online: true
},
Ryan: {
age: 19,
online: true
}
};
function isEveryoneHere(obj) {
return [
'Alan',
'Jeff',
'Sarah',
'Ryan'
].every(i => obj.hasOwnProperty(i));
}
console.log(isEveryoneHere(users));
```
</section>

View File

@@ -2,25 +2,29 @@
id: 587d7b7b367417b2b2512b17
title: Combine Arrays with the Spread Operator
challengeType: 1
videoUrl: ''
forumTopicId: 301156
localeTitle: Объединить массивы с оператором распространения
---
## Description
<section id="description"> Другим огромным преимуществом оператора <dfn>спреда</dfn> является возможность объединения массивов или вставки всех элементов одного массива в другой при любом индексе. С более традиционными синтаксисами мы можем конкатенировать массивы, но это позволяет нам объединять массивы в конце одного и в начале другого. Синтаксис Spread делает следующую операцию чрезвычайно простой: <blockquote> пусть thisArray = [&#39;sage&#39;, &#39;rosemary&#39;, &#39;parsley&#39;, &#39;thyme&#39;]; <br><br> let thatArray = [&#39;basil&#39;, &#39;cilantro&#39;, ... thisArray, &#39;coriander&#39;]; <br> // thisArray теперь равен [&#39;basil&#39;, &#39;cilantro&#39;, &#39;sage&#39;, &#39;rosemary&#39;, &#39;parsley&#39;, &#39;thyme&#39;, &#39;coriander&#39;] </blockquote> Используя синтаксис распространения, мы только что выполнили операцию, которая была бы более сложной и более сложной, если бы мы использовали традиционные методы. </section>
<section id='description'>
Другим огромным преимуществом оператора <dfn>спреда</dfn> является возможность объединения массивов или вставки всех элементов одного массива в другой при любом индексе. С более традиционными синтаксисами мы можем конкатенировать массивы, но это позволяет нам объединять массивы в конце одного и в начале другого. Синтаксис Spread делает следующую операцию чрезвычайно простой: <blockquote> пусть thisArray = [&#39;sage&#39;, &#39;rosemary&#39;, &#39;parsley&#39;, &#39;thyme&#39;]; <br><br> let thatArray = [&#39;basil&#39;, &#39;cilantro&#39;, ... thisArray, &#39;coriander&#39;]; <br> // thisArray теперь равен [&#39;basil&#39;, &#39;cilantro&#39;, &#39;sage&#39;, &#39;rosemary&#39;, &#39;parsley&#39;, &#39;thyme&#39;, &#39;coriander&#39;] </blockquote> Используя синтаксис распространения, мы только что выполнили операцию, которая была бы более сложной и более сложной, если бы мы использовали традиционные методы.
</section>
## Instructions
<section id="instructions"> Мы определили функцию <code>spreadOut</code> которая возвращает <code>sentence</code> переменной, модифицируйте функцию с помощью оператора <dfn>спреда,</dfn> чтобы он возвращал массив <code>[&#39;learning&#39;, &#39;to&#39;, &#39;code&#39;, &#39;is&#39;, &#39;fun&#39;]</code> . </section>
<section id='instructions'>
Мы определили функцию <code>spreadOut</code> которая возвращает <code>sentence</code> переменной, модифицируйте функцию с помощью оператора <dfn>спреда,</dfn> чтобы он возвращал массив <code>[&#39;learning&#39;, &#39;to&#39;, &#39;code&#39;, &#39;is&#39;, &#39;fun&#39;]</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: '<code>spreadOut</code> должен вернуться <code>[&quot;learning&quot;, &quot;to&quot;, &quot;code&quot;, &quot;is&quot;, &quot;fun&quot;]</code>'
testString: 'assert.deepEqual(spreadOut(), ["learning", "to", "code", "is", "fun"], "<code>spreadOut</code> should return <code>["learning", "to", "code", "is", "fun"]</code>");'
- text: Функция <code>spreadOut</code> должна использовать синтаксис распространения
testString: 'assert.notStrictEqual(spreadOut.toString().search(/[...]/), -1, "The <code>spreadOut</code> function should utilize spread syntax");'
- text: <code>spreadOut</code> should return <code>["learning", "to", "code", "is", "fun"]</code>
testString: assert.deepEqual(spreadOut(), ['learning', 'to', 'code', 'is', 'fun']);
- text: The <code>spreadOut</code> function should utilize spread syntax
testString: assert.notStrictEqual(spreadOut.toString().search(/[...]/), -1);
```
@@ -45,8 +49,6 @@ console.log(spreadOut());
</div>
</section>
## Solution
@@ -54,5 +56,12 @@ console.log(spreadOut());
```js
// solution required
function spreadOut() {
let fragment = ['to', 'code'];
let sentence = ['learning', ...fragment, 'is', 'fun'];
return sentence;
}
```
</section>

View File

@@ -2,31 +2,35 @@
id: 587d7b7b367417b2b2512b13
title: Copy an Array with the Spread Operator
challengeType: 1
videoUrl: ''
forumTopicId: 301157
localeTitle: Скопируйте массив с помощью оператора распространения
---
## Description
<section id="description"> Хотя <code>slice()</code> позволяет нам выбирать, какие элементы массива копировать, среди нескольких других полезных задач, новый <dfn>оператор с расширением</dfn> ES6 позволяет нам легко скопировать <em>все</em> элементы массива в порядке, с простым и хорошо читаемым синтаксисом. Синтаксис распространения просто выглядит так: <code>...</code> На практике мы можем использовать оператор спредов для копирования массива следующим образом: <blockquote> let thisArray = [true, true, undefined, false, null]; <br> let thatArray = [... thisArray]; <br> // thisArray равно [true, true, undefined, false, null] <br> // thisArray остается неизменным и идентичен этому массиву </blockquote></section>
<section id='description'>
Хотя <code>slice()</code> позволяет нам выбирать, какие элементы массива копировать, среди нескольких других полезных задач, новый <dfn>оператор с расширением</dfn> ES6 позволяет нам легко скопировать <em>все</em> элементы массива в порядке, с простым и хорошо читаемым синтаксисом. Синтаксис распространения просто выглядит так: <code>...</code> На практике мы можем использовать оператор спредов для копирования массива следующим образом: <blockquote> let thisArray = [true, true, undefined, false, null]; <br> let thatArray = [... thisArray]; <br> // thisArray равно [true, true, undefined, false, null] <br> // thisArray остается неизменным и идентичен этому массиву </blockquote>
</section>
## Instructions
<section id="instructions"> Мы определили функцию <code>copyMachine</code> которая принимает <code>arr</code> (массив) и <code>num</code> (число) в качестве аргументов. Функция должна возвращать новый массив, состоящий из <code>num</code> копий <code>arr</code> . Мы выполнили большую часть работы для вас, но пока это не работает. Измените функцию, используя синтаксис распространения, чтобы он работал правильно (подсказка: здесь может быть полезен другой метод, который мы уже рассмотрели!). </section>
<section id='instructions'>
Мы определили функцию <code>copyMachine</code> которая принимает <code>arr</code> (массив) и <code>num</code> (число) в качестве аргументов. Функция должна возвращать новый массив, состоящий из <code>num</code> копий <code>arr</code> . Мы выполнили большую часть работы для вас, но пока это не работает. Измените функцию, используя синтаксис распространения, чтобы он работал правильно (подсказка: здесь может быть полезен другой метод, который мы уже рассмотрели!).
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: '<code>copyMachine([true, false, true], 2)</code> должен возвращать <code>[[true, false, true], [true, false, true]]</code>'
testString: 'assert.deepEqual(copyMachine([true, false, true], 2), [[true, false, true], [true, false, true]], "<code>copyMachine([true, false, true], 2)</code> should return <code>[[true, false, true], [true, false, true]]</code>");'
- text: '<code>copyMachine([1, 2, 3], 5)</code> должны возвращать <code>[[1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3]]</code>'
testString: 'assert.deepEqual(copyMachine([1, 2, 3], 5), [[1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3]], "<code>copyMachine([1, 2, 3], 5)</code> should return <code>[[1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3]]</code>");'
- text: '<code>copyMachine([true, true, null], 1)</code> должен возвращать <code>[[true, true, null]]</code>'
testString: 'assert.deepEqual(copyMachine([true, true, null], 1), [[true, true, null]], "<code>copyMachine([true, true, null], 1)</code> should return <code>[[true, true, null]]</code>");'
- text: '<code>copyMachine([&quot;it works&quot;], 3)</code> должен вернуться <code>[[&quot;it works&quot;], [&quot;it works&quot;], [&quot;it works&quot;]]</code>'
testString: 'assert.deepEqual(copyMachine(["it works"], 3), [["it works"], ["it works"], ["it works"]], "<code>copyMachine(["it works"], 3)</code> should return <code>[["it works"], ["it works"], ["it works"]]</code>");'
- text: Функция <code>copyMachine</code> должна использовать <code>spread operator</code> с <code>spread operator</code> с массивом <code>arr</code>
testString: 'assert.notStrictEqual(copyMachine.toString().indexOf(".concat(_toConsumableArray(arr))"), -1, "The <code>copyMachine</code> function should utilize the <code>spread operator</code> with array <code>arr</code>");'
- text: <code>copyMachine([true, false, true], 2)</code> should return <code>[[true, false, true], [true, false, true]]</code>
testString: assert.deepEqual(copyMachine([true, false, true], 2), [[true, false, true], [true, false, true]]);
- text: <code>copyMachine([1, 2, 3], 5)</code> should return <code>[[1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3]]</code>
testString: assert.deepEqual(copyMachine([1, 2, 3], 5), [[1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3]]);
- text: <code>copyMachine([true, true, null], 1)</code> should return <code>[[true, true, null]]</code>
testString: assert.deepEqual(copyMachine([true, true, null], 1), [[true, true, null]]);
- text: <code>copyMachine(["it works"], 3)</code> should return <code>[["it works"], ["it works"], ["it works"]]</code>
testString: assert.deepEqual(copyMachine(['it works'], 3), [['it works'], ['it works'], ['it works']]);
- text: The <code>copyMachine</code> function should utilize the <code>spread operator</code> with array <code>arr</code>
testString: assert(removeJSComments(code).match(/\.\.\.arr/));
```
@@ -56,7 +60,15 @@ console.log(copyMachine([true, false, true], 2));
</div>
### After Tests
<div id='js-teardown'>
```js
const removeJSComments = str => str.replace(/\/\*[\s\S]*?\*\/|\/\/.*$/gm, '');
```
</div>
</section>
@@ -64,6 +76,17 @@ console.log(copyMachine([true, false, true], 2));
<section id='solution'>
```js
// solution required
function copyMachine(arr,num){
let newArr=[];
while(num >=1){
// change code below this line
newArr.push([...arr]);
//change code above this line
num--;
}
return newArr;
}
console.log(copyMachine([true, false, true], 2));
```
</section>

View File

@@ -2,25 +2,29 @@
id: 587d7b7a367417b2b2512b12
title: Copy Array Items Using slice()
challengeType: 1
videoUrl: ''
forumTopicId: 301158
localeTitle: Копирование элементов массива Использование среза ()
---
## Description
<section id="description"> Следующий метод, который мы рассмотрим, - <code>slice()</code> . <code>slice()</code> , вместо того, чтобы модифицировать массив, копировать или <em>извлекать</em> заданное количество элементов в новый массив, оставляя массив вызываемым без изменений. <code>slice()</code> принимает только 2 параметра - первый - это индекс, с которого нужно начинать извлечение, а второй - это индекс, в котором останавливается извлечение (извлечение произойдет до, но не включает элемент в этот индекс). Учти это: <blockquote> пусть weatherConditions = [&#39;rain&#39;, &#39;snow&#39;, &#39;sleet&#39;, &#39;hail&#39;, &#39;clear&#39;]; <br><br> let todaysWeather = weatherConditions.slice (1, 3); <br> // todaysWeather равно [&#39;snow&#39;, &#39;sleet&#39;]; <br> // weatherConditions по-прежнему равно [&#39;rain&#39;, &#39;snow&#39;, &#39;sleet&#39;, &#39;hail&#39;, &#39;clear&#39;] <br></blockquote> Фактически, мы создали новый массив, извлекая элементы из существующего массива. </section>
<section id='description'>
Следующий метод, который мы рассмотрим, - <code>slice()</code> . <code>slice()</code> , вместо того, чтобы модифицировать массив, копировать или <em>извлекать</em> заданное количество элементов в новый массив, оставляя массив вызываемым без изменений. <code>slice()</code> принимает только 2 параметра - первый - это индекс, с которого нужно начинать извлечение, а второй - это индекс, в котором останавливается извлечение (извлечение произойдет до, но не включает элемент в этот индекс). Учти это: <blockquote> пусть weatherConditions = [&#39;rain&#39;, &#39;snow&#39;, &#39;sleet&#39;, &#39;hail&#39;, &#39;clear&#39;]; <br><br> let todaysWeather = weatherConditions.slice (1, 3); <br> // todaysWeather равно [&#39;snow&#39;, &#39;sleet&#39;]; <br> // weatherConditions по-прежнему равно [&#39;rain&#39;, &#39;snow&#39;, &#39;sleet&#39;, &#39;hail&#39;, &#39;clear&#39;] <br></blockquote> Фактически, мы создали новый массив, извлекая элементы из существующего массива.
</section>
## Instructions
<section id="instructions"> Мы определили функцию, <code>forecast</code> , которая принимает массив в качестве аргумента. Измените функцию, используя <code>slice()</code> чтобы извлечь информацию из массива аргументов и вернуть новый массив, содержащий элементы <code>&#39;warm&#39;</code> и <code>&#39;sunny&#39;</code> . </section>
<section id='instructions'>
Мы определили функцию, <code>forecast</code> , которая принимает массив в качестве аргумента. Измените функцию, используя <code>slice()</code> чтобы извлечь информацию из массива аргументов и вернуть новый массив, содержащий элементы <code>&#39;warm&#39;</code> и <code>&#39;sunny&#39;</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: '<code>forecast</code> должен вернуться <code>[&quot;warm&quot;, &quot;sunny&quot;]</code>'
testString: 'assert.deepEqual(forecast(["cold", "rainy", "warm", "sunny", "cool", "thunderstorms"]), ["warm", "sunny"], "<code>forecast</code> should return <code>["warm", "sunny"]");'
- text: Функция <code>forecast</code> должна использовать метод <code>slice()</code>
testString: 'assert(/\.slice\(/.test(code), "The <code>forecast</code> function should utilize the <code>slice()</code> method");'
- text: <code>forecast</code> should return <code>["warm", "sunny"]</code>
testString: assert.deepEqual(forecast(['cold', 'rainy', 'warm', 'sunny', 'cool', 'thunderstorms']), ['warm', 'sunny']);
- text: The <code>forecast</code> function should utilize the <code>slice()</code> method
testString: assert(/\.slice\(/.test(code));
```
@@ -45,14 +49,15 @@ console.log(forecast(['cold', 'rainy', 'warm', 'sunny', 'cool', 'thunderstorms']
</div>
</section>
## Solution
<section id='solution'>
```js
// solution required
function forecast(arr) {
return arr.slice(2,4);
}
```
</section>

View File

@@ -2,31 +2,35 @@
id: 587d7b7b367417b2b2512b16
title: Create complex multi-dimensional arrays
challengeType: 1
videoUrl: ''
forumTopicId: 301159
localeTitle: Создание сложных многомерных массивов
---
## Description
<section id="description"> Потрясающие! Вы только что узнали тонну о массивах! Это был довольно высокий уровень обзора, и есть еще много возможностей узнать о работе с массивами, многое из которых вы увидите в последующих разделах. Но прежде чем перейти к просмотру <dfn>объектов</dfn> , давайте взглянем еще раз и посмотрим, как массивы могут стать немного более сложными, чем то, что мы видели в предыдущих задачах. Одна из самых мощных функций при рассмотрении массивов как структур данных состоит в том, что массивы могут содержать или даже полностью состоять из других массивов. Мы видели массивы, которые содержат массивы в предыдущих задачах, но довольно простые. Однако массивы могут содержать бесконечную глубину массивов, которые могут содержать другие массивы, каждый со своими произвольными уровнями глубины и т. Д. Таким образом, массив может очень быстро стать очень сложной структурой данных, известной как <dfn>многомерный</dfn> или вложенный массив. Рассмотрим следующий пример: <blockquote> let nestedArray = [// верхний или первый уровень - внешний массив <br> [&#39;deep&#39;], // массив в массиве, 2 уровня глубины <br> [ <br> [&#39;глубже&#39;], [&#39;более глубокий&#39;] // 2 массива вложенные 3 уровня в глубину <br> ], <br> [ <br> [ <br> [&#39;deepest&#39;], [&#39;deepest&#39;] // 2 массива вложенные 4 уровня в глубину <br> ], <br> [ <br> [ <br> [&#39;deepest-est?&#39;] // массив вложен в 5 уровней в глубину <br> ] <br> ] <br> ] <br> ]; </blockquote> Хотя этот пример может показаться запутанным, этот уровень сложности не является неслыханным или даже необычным при работе с большими объемами данных. Тем не менее, мы все же можем очень легко получить доступ к самым глубоким уровням массива этого комплекса с помощью скобок: <blockquote> console.log (nestedArray [2] [1] [0] [0] [0]); <br> // logs: самый глубокий? </blockquote> И теперь, когда мы знаем, где эта часть данных, мы можем ее сбросить, если нам нужно: <blockquote> nestedArray [2] [1] [0] [0] [0] = &#39;еще глубже&#39;; <br><br> console.log (nestedArray [2] [1] [0] [0] [0]); <br> // теперь журналы: еще глубже </blockquote></section>
<section id='description'>
Потрясающие! Вы только что узнали тонну о массивах! Это был довольно высокий уровень обзора, и есть еще много возможностей узнать о работе с массивами, многое из которых вы увидите в последующих разделах. Но прежде чем перейти к просмотру <dfn>объектов</dfn> , давайте взглянем еще раз и посмотрим, как массивы могут стать немного более сложными, чем то, что мы видели в предыдущих задачах. Одна из самых мощных функций при рассмотрении массивов как структур данных состоит в том, что массивы могут содержать или даже полностью состоять из других массивов. Мы видели массивы, которые содержат массивы в предыдущих задачах, но довольно простые. Однако массивы могут содержать бесконечную глубину массивов, которые могут содержать другие массивы, каждый со своими произвольными уровнями глубины и т. Д. Таким образом, массив может очень быстро стать очень сложной структурой данных, известной как <dfn>многомерный</dfn> или вложенный массив. Рассмотрим следующий пример: <blockquote> let nestedArray = [// верхний или первый уровень - внешний массив <br> [&#39;deep&#39;], // массив в массиве, 2 уровня глубины <br> [ <br> [&#39;глубже&#39;], [&#39;более глубокий&#39;] // 2 массива вложенные 3 уровня в глубину <br> ], <br> [ <br> [ <br> [&#39;deepest&#39;], [&#39;deepest&#39;] // 2 массива вложенные 4 уровня в глубину <br> ], <br> [ <br> [ <br> [&#39;deepest-est?&#39;] // массив вложен в 5 уровней в глубину <br> ] <br> ] <br> ] <br> ]; </blockquote> Хотя этот пример может показаться запутанным, этот уровень сложности не является неслыханным или даже необычным при работе с большими объемами данных. Тем не менее, мы все же можем очень легко получить доступ к самым глубоким уровням массива этого комплекса с помощью скобок: <blockquote> console.log (nestedArray [2] [1] [0] [0] [0]); <br> // logs: самый глубокий? </blockquote> И теперь, когда мы знаем, где эта часть данных, мы можем ее сбросить, если нам нужно: <blockquote> nestedArray [2] [1] [0] [0] [0] = &#39;еще глубже&#39;; <br><br> console.log (nestedArray [2] [1] [0] [0] [0]); <br> // теперь журналы: еще глубже </blockquote>
</section>
## Instructions
<section id="instructions"> Мы определили переменную <code>myNestedArray</code> , равную массиву. Измените <code>myNestedArray</code> , используя любую комбинацию <dfn>строк</dfn> , <dfn>чисел</dfn> и <dfn>логических</dfn> элементов для элементов данных, так что он имеет ровно пять уровней глубины (помните, что внешний массив - это уровень 1). Где-то на третьем уровне, включите строку <code>&#39;deep&#39;</code> , на четвертом уровне, включите строку <code>&#39;deeper&#39;</code> , а на пятом уровне включите строку <code>&#39;deepest&#39;</code> . </section>
<section id='instructions'>
Мы определили переменную <code>myNestedArray</code> , равную массиву. Измените <code>myNestedArray</code> , используя любую комбинацию <dfn>строк</dfn> , <dfn>чисел</dfn> и <dfn>логических</dfn> элементов для элементов данных, так что он имеет ровно пять уровней глубины (помните, что внешний массив - это уровень 1). Где-то на третьем уровне, включите строку <code>&#39;deep&#39;</code> , на четвертом уровне, включите строку <code>&#39;deeper&#39;</code> , а на пятом уровне включите строку <code>&#39;deepest&#39;</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: '<code>myNestedArray</code> должен содержать только числа, булевы и строки в качестве элементов данных'
testString: 'assert.strictEqual((function(arr) { let flattened = (function flatten(arr) { const flat = [].concat(...arr); return flat.some (Array.isArray) ? flatten(flat) : flat; })(arr); for (let i = 0; i < flattened.length; i++) { if ( typeof flattened[i] !== "number" && typeof flattened[i] !== "string" && typeof flattened[i] !== "boolean") { return false } } return true })(myNestedArray), true, "<code>myNestedArray</code> should contain only numbers, booleans, and strings as data elements");'
- text: <code>myNestedArray</code> должен иметь ровно 5 уровней глубины
testString: 'assert.strictEqual((function(arr) {let depth = 0;function arrayDepth(array, i, d) { if (Array.isArray(array[i])) { arrayDepth(array[i], 0, d + 1);} else { depth = (d > depth) ? d : depth;}if (i < array.length) { arrayDepth(array, i + 1, d);} }arrayDepth(arr, 0, 0);return depth;})(myNestedArray), 4, "<code>myNestedArray</code> should have exactly 5 levels of depth");'
- text: '<code>myNestedArray</code> должен содержать ровно одно вхождение строки <code>&quot;deep&quot;</code> на массиве, вложенном в 3 уровня глубины'
testString: 'assert((function howDeep(array, target, depth = 0) {return array.reduce((combined, current) => {if (Array.isArray(current)) { return combined.concat(howDeep(current, target, depth + 1));} else if (current === target) { return combined.concat(depth);} else { return combined;}}, []);})(myNestedArray, "deep").length === 1 && (function howDeep(array, target, depth = 0) {return array.reduce((combined, current) => {if (Array.isArray(current)) { return combined.concat(howDeep(current, target, depth + 1));} else if (current === target) { return combined.concat(depth);} else { return combined;}}, []);})(myNestedArray, "deep")[0] === 2, "<code>myNestedArray</code> should contain exactly one occurrence of the string <code>"deep"</code> on an array nested 3 levels deep");'
- text: '<code>myNestedArray</code> должен содержать ровно одно вхождение строки <code>&quot;deeper&quot;</code> на массив, вложенный в 4 уровня глубины'
testString: 'assert((function howDeep(array, target, depth = 0) {return array.reduce((combined, current) => {if (Array.isArray(current)) { return combined.concat(howDeep(current, target, depth + 1));} else if (current === target) { return combined.concat(depth);} else { return combined;}}, []);})(myNestedArray, "deeper").length === 1 && (function howDeep(array, target, depth = 0) {return array.reduce((combined, current) => {if (Array.isArray(current)) { return combined.concat(howDeep(current, target, depth + 1));} else if (current === target) { return combined.concat(depth);} else { return combined;}}, []);})(myNestedArray, "deeper")[0] === 3, "<code>myNestedArray</code> should contain exactly one occurrence of the string <code>"deeper"</code> on an array nested 4 levels deep");'
- text: '<code>myNestedArray</code> должен содержать ровно одно вхождение строки <code>&quot;deepest&quot;</code> в массиве, вложенном в 5 уровней'
testString: 'assert((function howDeep(array, target, depth = 0) {return array.reduce((combined, current) => {if (Array.isArray(current)) { return combined.concat(howDeep(current, target, depth + 1));} else if (current === target) { return combined.concat(depth);} else { return combined;}}, []);})(myNestedArray, "deepest").length === 1 && (function howDeep(array, target, depth = 0) {return array.reduce((combined, current) => {if (Array.isArray(current)) { return combined.concat(howDeep(current, target, depth + 1));} else if (current === target) { return combined.concat(depth);} else { return combined;}}, []);})(myNestedArray, "deepest")[0] === 4, "<code>myNestedArray</code> should contain exactly one occurrence of the string <code>"deepest"</code> on an array nested 5 levels deep");'
- text: <code>myNestedArray</code> should contain only numbers, booleans, and strings as data elements
testString: 'assert.strictEqual((function(arr) { let flattened = (function flatten(arr) { const flat = [].concat(...arr); return flat.some (Array.isArray) ? flatten(flat) : flat; })(arr); for (let i = 0; i < flattened.length; i++) { if ( typeof flattened[i] !== ''number'' && typeof flattened[i] !== ''string'' && typeof flattened[i] !== ''boolean'') { return false } } return true })(myNestedArray), true);'
- text: <code>myNestedArray</code> should have exactly 5 levels of depth
testString: 'assert.strictEqual((function(arr) {let depth = 0;function arrayDepth(array, i, d) { if (Array.isArray(array[i])) { arrayDepth(array[i], 0, d + 1);} else { depth = (d > depth) ? d : depth;}if (i < array.length) { arrayDepth(array, i + 1, d);} }arrayDepth(arr, 0, 0);return depth;})(myNestedArray), 4);'
- text: <code>myNestedArray</code> should contain exactly one occurrence of the string <code>"deep"</code> on an array nested 3 levels deep
testString: assert((function howDeep(array, target, depth = 0) {return array.reduce((combined, current) => {if (Array.isArray(current)) { return combined.concat(howDeep(current, target, depth + 1));} else if (current === target) { return combined.concat(depth);} else { return combined;}}, []);})(myNestedArray, 'deep').length === 1 && (function howDeep(array, target, depth = 0) {return array.reduce((combined, current) => {if (Array.isArray(current)) { return combined.concat(howDeep(current, target, depth + 1));} else if (current === target) { return combined.concat(depth);} else { return combined;}}, []);})(myNestedArray, 'deep')[0] === 2);
- text: <code>myNestedArray</code> should contain exactly one occurrence of the string <code>"deeper"</code> on an array nested 4 levels deep
testString: assert((function howDeep(array, target, depth = 0) {return array.reduce((combined, current) => {if (Array.isArray(current)) { return combined.concat(howDeep(current, target, depth + 1));} else if (current === target) { return combined.concat(depth);} else { return combined;}}, []);})(myNestedArray, 'deeper').length === 1 && (function howDeep(array, target, depth = 0) {return array.reduce((combined, current) => {if (Array.isArray(current)) { return combined.concat(howDeep(current, target, depth + 1));} else if (current === target) { return combined.concat(depth);} else { return combined;}}, []);})(myNestedArray, 'deeper')[0] === 3);
- text: <code>myNestedArray</code> should contain exactly one occurrence of the string <code>"deepest"</code> on an array nested 5 levels deep
testString: assert((function howDeep(array, target, depth = 0) {return array.reduce((combined, current) => {if (Array.isArray(current)) { return combined.concat(howDeep(current, target, depth + 1));} else if (current === target) { return combined.concat(depth);} else { return combined;}}, []);})(myNestedArray, 'deepest').length === 1 && (function howDeep(array, target, depth = 0) {return array.reduce((combined, current) => {if (Array.isArray(current)) { return combined.concat(howDeep(current, target, depth + 1));} else if (current === target) { return combined.concat(depth);} else { return combined;}}, []);})(myNestedArray, 'deepest')[0] === 4);
```
@@ -52,14 +56,21 @@ let myNestedArray = [
</div>
</section>
## Solution
<section id='solution'>
```js
// solution required
let myNestedArray = [
// change code below this line
['unshift', ['deep', ['deeper', ['deepest']]],false, 1, 2, 3, 'complex', 'nested'],
['loop', 'shift', 6, 7, 1000, 'method'],
['concat', false, true, 'spread', 'array'],
['mutate', 1327.98, 'splice', 'slice', 'push'],
['iterate', 1.3849, 7, '8.4876', 'arbitrary', 'depth']
// change code above this line
];
```
</section>

View File

@@ -2,25 +2,29 @@
id: 587d7b7d367417b2b2512b1e
title: Generate an Array of All Object Keys with Object.keys()
challengeType: 1
videoUrl: ''
forumTopicId: 301160
localeTitle: Генерировать массив всех ключей объекта с помощью Object.keys ()
---
## Description
<section id="description"> Мы также можем сгенерировать массив, содержащий все ключи, хранящиеся в объекте, с использованием <code>Object.keys()</code> и передачи объекта в качестве аргумента. Это вернет массив со строками, представляющими каждое свойство объекта. Опять же, не будет никакого конкретного порядка для записей в массиве. </section>
<section id='description'>
Мы также можем сгенерировать массив, содержащий все ключи, хранящиеся в объекте, с использованием <code>Object.keys()</code> и передачи объекта в качестве аргумента. Это вернет массив со строками, представляющими каждое свойство объекта. Опять же, не будет никакого конкретного порядка для записей в массиве.
</section>
## Instructions
<section id="instructions"> Завершите запись функции <code>getArrayOfUsers</code> чтобы она возвращала массив, содержащий все свойства объекта, который он получает в качестве аргумента. </section>
<section id='instructions'>
Завершите запись функции <code>getArrayOfUsers</code> чтобы она возвращала массив, содержащий все свойства объекта, который он получает в качестве аргумента.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: 'Объект <code>users</code> содержит только ключи <code>Alan</code> , <code>Jeff</code> , <code>Sarah</code> и <code>Ryan</code>'
testString: 'assert("Alan" in users && "Jeff" in users && "Sarah" in users && "Ryan" in users && Object.keys(users).length === 4, "The <code>users</code> object only contains the keys <code>Alan</code>, <code>Jeff</code>, <code>Sarah</code>, and <code>Ryan</code>");'
- text: 'Функция <code>getArrayOfUsers</code> возвращает массив, содержащий все ключи в объекте <code>users</code>'
testString: 'assert((function() { users.Sam = {}; users.Lewis = {}; let R = getArrayOfUsers(users); return (R.indexOf("Alan") !== -1 && R.indexOf("Jeff") !== -1 && R.indexOf("Sarah") !== -1 && R.indexOf("Ryan") !== -1 && R.indexOf("Sam") !== -1 && R.indexOf("Lewis") !== -1); })() === true, "The <code>getArrayOfUsers</code> function returns an array which contains all the keys in the <code>users</code> object");'
- text: The <code>users</code> object only contains the keys <code>Alan</code>, <code>Jeff</code>, <code>Sarah</code>, and <code>Ryan</code>
testString: assert('Alan' in users && 'Jeff' in users && 'Sarah' in users && 'Ryan' in users && Object.keys(users).length === 4);
- text: The <code>getArrayOfUsers</code> function returns an array which contains all the keys in the <code>users</code> object
testString: assert((function() { users.Sam = {}; users.Lewis = {}; let R = getArrayOfUsers(users); return (R.indexOf('Alan') !== -1 && R.indexOf('Jeff') !== -1 && R.indexOf('Sarah') !== -1 && R.indexOf('Ryan') !== -1 && R.indexOf('Sam') !== -1 && R.indexOf('Lewis') !== -1); })() === true);
```
@@ -63,14 +67,36 @@ console.log(getArrayOfUsers(users));
</div>
</section>
## Solution
<section id='solution'>
```js
// solution required
let users = {
Alan: {
age: 27,
online: false
},
Jeff: {
age: 32,
online: true
},
Sarah: {
age: 48,
online: false
},
Ryan: {
age: 19,
online: true
}
};
function getArrayOfUsers(obj) {
return Object.keys(obj);
}
console.log(getArrayOfUsers(users));
```
</section>

View File

@@ -2,31 +2,35 @@
id: 587d7b7b367417b2b2512b15
title: Iterate Through All an Array's Items Using For Loops
challengeType: 1
videoUrl: ''
forumTopicId: 301161
localeTitle: Итерация через все элементы массива с использованием циклов
---
## Description
<section id="description"> Иногда при работе с массивами очень удобно выполнять итерацию по каждому элементу, чтобы найти один или несколько элементов, которые могут нам понадобиться, или манипулировать массивом на основе того, какие элементы данных соответствуют определенному набору критериев. JavaScript предлагает несколько встроенных методов, каждый из которых перебирает несколько массивов несколькими разными способами для достижения разных результатов (например, each <code>every()</code> , <code>forEach()</code> , <code>map()</code> и т. Д.), Однако наиболее гибкий метод и предлагает нам наибольшую величина управления является простым <code>for</code> петли. Рассмотрим следующее: <blockquote> функция largeThanTen (arr) { <br> пусть newArr = []; <br> для (пусть i = 0; i &lt;arr.length; i ++) { <br> если (arr [i]&gt; 10) { <br> newArr.push (обр [я]); <br> } <br> } <br> return newArr; <br> } <br><br> moreThanTen ([2, 12, 8, 14, 80, 0, 1]); <br> // возвращает [12, 14, 80] </blockquote> Используя цикл <code>for</code> , эта функция выполняет итерации по каждому элементу массива и обращается к нему, и подвергает его простому тесту, который мы создали. Таким образом, мы легко и программно определили, какие элементы данных больше <code>10</code> , и возвратил новый массив, содержащий эти элементы. </section>
<section id='description'>
Иногда при работе с массивами очень удобно выполнять итерацию по каждому элементу, чтобы найти один или несколько элементов, которые могут нам понадобиться, или манипулировать массивом на основе того, какие элементы данных соответствуют определенному набору критериев. JavaScript предлагает несколько встроенных методов, каждый из которых перебирает несколько массивов несколькими разными способами для достижения разных результатов (например, each <code>every()</code> , <code>forEach()</code> , <code>map()</code> и т. Д.), Однако наиболее гибкий метод и предлагает нам наибольшую величина управления является простым <code>for</code> петли. Рассмотрим следующее: <blockquote> функция largeThanTen (arr) { <br> пусть newArr = []; <br> для (пусть i = 0; i &lt;arr.length; i ++) { <br> если (arr [i]&gt; 10) { <br> newArr.push (обр [я]); <br> } <br> } <br> return newArr; <br> } <br><br> moreThanTen ([2, 12, 8, 14, 80, 0, 1]); <br> // возвращает [12, 14, 80] </blockquote> Используя цикл <code>for</code> , эта функция выполняет итерации по каждому элементу массива и обращается к нему, и подвергает его простому тесту, который мы создали. Таким образом, мы легко и программно определили, какие элементы данных больше <code>10</code> , и возвратил новый массив, содержащий эти элементы.
</section>
## Instructions
<section id="instructions"> Мы определили функцию, <code>filteredArray</code> , которая принимает <code>arr</code> , вложенный массив и <code>elem</code> качестве аргументов, и возвращает новый массив. <code>elem</code> представляет собой элемент, который может присутствовать или не присутствовать на одном или нескольких массивах, вложенных в <code>arr</code> . Измените функцию, используя цикл <code>for</code> , чтобы вернуть отфильтрованную версию переданного массива таким образом, чтобы любой массив, вложенный в <code>arr</code> содержащий <code>elem</code> , был удален. </section>
<section id='instructions'>
Мы определили функцию, <code>filteredArray</code> , которая принимает <code>arr</code> , вложенный массив и <code>elem</code> качестве аргументов, и возвращает новый массив. <code>elem</code> представляет собой элемент, который может присутствовать или не присутствовать на одном или нескольких массивах, вложенных в <code>arr</code> . Измените функцию, используя цикл <code>for</code> , чтобы вернуть отфильтрованную версию переданного массива таким образом, чтобы любой массив, вложенный в <code>arr</code> содержащий <code>elem</code> , был удален.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: '<code>filteredArray([[10, 8, 3], [14, 6, 23], [3, 18, 6]], 18)</code> должны вернуться <code>[ [10, 8, 3], [14, 6, 23] ]</code>'
testString: 'assert.deepEqual(filteredArray([ [10, 8, 3], [14, 6, 23], [3, 18, 6] ], 18), [[10, 8, 3], [14, 6, 23]], "<code>filteredArray([[10, 8, 3], [14, 6, 23], [3, 18, 6]], 18)</code> should return <code>[ [10, 8, 3], [14, 6, 23] ]</code>");'
- text: '<code>filteredArray([ [&quot;trumpets&quot;, 2], [&quot;flutes&quot;, 4], [&quot;saxophones&quot;, 2] ], 2)</code> должны возвращать <code>[ [&quot;flutes&quot;, 4] ]</code>'
testString: 'assert.deepEqual(filteredArray([ ["trumpets", 2], ["flutes", 4], ["saxophones", 2] ], 2), [["flutes", 4]], "<code>filteredArray([ ["trumpets", 2], ["flutes", 4], ["saxophones", 2] ], 2)</code> should return <code>[ ["flutes", 4] ]</code>");'
- text: '<code>filteredArray([ [&quot;amy&quot;, &quot;beth&quot;, &quot;sam&quot;], [&quot;dave&quot;, &quot;sean&quot;, &quot;peter&quot;] ], &quot;peter&quot;)</code> должен возвращать <code>[ [&quot;amy&quot;, &quot;beth&quot;, &quot;sam&quot;] ]</code>'
testString: 'assert.deepEqual(filteredArray([["amy", "beth", "sam"], ["dave", "sean", "peter"]], "peter"), [["amy", "beth", "sam"]], "<code>filteredArray([ ["amy", "beth", "sam"], ["dave", "sean", "peter"] ], "peter")</code> should return <code>[ ["amy", "beth", "sam"] ]</code>");'
- text: '<code>filteredArray([[3, 2, 3], [1, 6, 3], [3, 13, 26], [19, 3, 9]], 3)</code> должны возвращать <code>[ ]</code>'
testString: 'assert.deepEqual(filteredArray([[3, 2, 3], [1, 6, 3], [3, 13, 26], [19, 3, 9]], 3), [], "<code>filteredArray([[3, 2, 3], [1, 6, 3], [3, 13, 26], [19, 3, 9]], 3)</code> should return <code>[ ]</code>");'
- text: Функция <code>filteredArray</code> должна использовать цикл <code>for</code>
testString: 'assert.notStrictEqual(filteredArray.toString().search(/for/), -1, "The <code>filteredArray</code> function should utilize a <code>for</code> loop");'
- text: <code>filteredArray([[10, 8, 3], [14, 6, 23], [3, 18, 6]], 18)</code> should return <code>[ [10, 8, 3], [14, 6, 23] ]</code>
testString: assert.deepEqual(filteredArray([ [10, 8, 3], [14, 6, 23], [3, 18, 6] ], 18), [[10, 8, 3], [14, 6, 23]]);
- text: <code>filteredArray([ ["trumpets", 2], ["flutes", 4], ["saxophones", 2] ], 2)</code> should return <code>[ ["flutes", 4] ]</code>
testString: assert.deepEqual(filteredArray([ ['trumpets', 2], ['flutes', 4], ['saxophones', 2] ], 2), [['flutes', 4]]);
- text: <code>filteredArray([ ["amy", "beth", "sam"], ["dave", "sean", "peter"] ], "peter")</code> should return <code>[ ["amy", "beth", "sam"] ]</code>
testString: assert.deepEqual(filteredArray([['amy', 'beth', 'sam'], ['dave', 'sean', 'peter']], 'peter'), [['amy', 'beth', 'sam']]);
- text: <code>filteredArray([[3, 2, 3], [1, 6, 3], [3, 13, 26], [19, 3, 9]], 3)</code> should return <code>[ ]</code>
testString: assert.deepEqual(filteredArray([[3, 2, 3], [1, 6, 3], [3, 13, 26], [19, 3, 9]], 3), []);
- text: The <code>filteredArray</code> function should utilize a <code>for</code> loop
testString: assert.notStrictEqual(filteredArray.toString().search(/for/), -1);
```
@@ -53,14 +57,23 @@ console.log(filteredArray([[3, 2, 3], [1, 6, 3], [3, 13, 26], [19, 3, 9]], 3));
</div>
</section>
## Solution
<section id='solution'>
```js
// solution required
function filteredArray(arr, elem) {
let newArr = [];
// change code below this line
for (let i = 0; i<arr.length; i++) {
if (arr[i].indexOf(elem) < 0) {
newArr.push(arr[i]);
}
}
// change code above this line
return newArr;
}
```
</section>

View File

@@ -1,26 +1,34 @@
---
id: 587d7b7d367417b2b2512b1d
title: 'Iterate Through the Keys of an Object with a for...in Statement'
title: Iterate Through the Keys of an Object with a for...in Statement
challengeType: 1
videoUrl: ''
forumTopicId: 301162
localeTitle: Итерация через ключи объекта с помощью for for ... in Statement
---
## Description
<section id="description"> Иногда вам может потребоваться повторить все ключи внутри объекта. Для этого требуется конкретный синтаксис в JavaScript, называемый выражением <dfn>for for ... in</dfn> . Для объекта наших <code>users</code> это может выглядеть так: <blockquote> для (разрешить пользователям пользователей) { <br> console.log (пользователь); <br> }; <br><br> // logs: <br> Алан <br> Джефф <br> Сара <br> Райан </blockquote> В этом заявлении мы определили <code>user</code> переменной, и, как вы можете видеть, эта переменная была сброшена во время каждой итерации каждому из ключей объекта, когда оператор зациклился на объекте, в результате чего каждое имя пользователя печаталось на консоль. <strong>ЗАМЕТКА:</strong> <br> Объекты не поддерживают упорядочение хранимых ключей, например массивов; таким образом, позиция клавиш на объекте или относительный порядок, в котором он появляется, не имеет значения при ссылке или доступе к этому ключу. </section>
<section id='description'>
Иногда вам может потребоваться повторить все ключи внутри объекта. Для этого требуется конкретный синтаксис в JavaScript, называемый выражением <dfn>for for ... in</dfn> . Для объекта наших <code>users</code> это может выглядеть так: <blockquote> для (разрешить пользователям пользователей) { <br> console.log (пользователь); <br> }; <br><br> // logs: <br> Алан <br> Джефф <br> Сара <br> Райан </blockquote> В этом заявлении мы определили <code>user</code> переменной, и, как вы можете видеть, эта переменная была сброшена во время каждой итерации каждому из ключей объекта, когда оператор зациклился на объекте, в результате чего каждое имя пользователя печаталось на консоль. <strong>ЗАМЕТКА:</strong> <br> Объекты не поддерживают упорядочение хранимых ключей, например массивов; таким образом, позиция клавиш на объекте или относительный порядок, в котором он появляется, не имеет значения при ссылке или доступе к этому ключу.
</section>
## Instructions
<section id="instructions"> Мы определили функцию <code>countOnline</code> ; используйте оператор <dfn>for for ...</dfn> внутри этой функции, чтобы прокручивать пользователей в объекте <code>users</code> и возвращать число пользователей, у которых свойство <code>online</code> установлено <code>true</code> . </section>
<section id='instructions'>
Мы определили функцию <code>countOnline</code> ; используйте оператор <dfn>for for ...</dfn> внутри этой функции, чтобы прокручивать пользователей в объекте <code>users</code> и возвращать число пользователей, у которых свойство <code>online</code> установлено <code>true</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>users</code> объект содержит пользователей <code>Jeff</code> и <code>Ryan</code> с <code>online</code> настройкой <code>true</code> и пользователи <code>Alan</code> и <code>Sarah</code> с <code>online</code> настройкой на <code>false</code>
testString: 'assert(users.Alan.online === false && users.Jeff.online === true && users.Sarah.online === false && users.Ryan.online === true, "The <code>users</code> object contains users <code>Jeff</code> and <code>Ryan</code> with <code>online</code> set to <code>true</code> and users <code>Alan</code> and <code>Sarah</code> with <code>online</code> set to <code>false</code>");'
- text: 'Функция <code>countOnline</code> возвращает количество пользователей, у которых свойство <code>online</code> установлено <code>countOnline</code> <code>true</code>'
testString: 'assert((function() { users.Harry = {online: true}; users.Sam = {online: true}; users.Carl = {online: true}; return countOnline(users) })() === 5, "The function <code>countOnline</code> returns the number of users with the <code>online</code> property set to <code>true</code>");'
- text: The function <code>countOnline</code> should use a `for in` statement to iterate through the object keys of the object passed to it.
testString: assert(code.match(/for\s*\(\s*(var|let)\s+[a-zA-Z_$]\w*\s+in\s+[a-zA-Z_$]\w*\s*\)\s*{/));
- text: 'The function <code>countOnline</code> should return <code>1</code> when the object <code>{ Alan: { online: false }, Jeff: { online: true }, Sarah: { online: false } }</code> is passed to it'
testString: assert(countOnline(usersObj1) === 1);
- text: 'The function <code>countOnline</code> should return <code>2</code> when the object <code>{ Alan: { online: true }, Jeff: { online: false }, Sarah: { online: true } }</code> is passed to it'
testString: assert(countOnline(usersObj2) === 2);
- text: 'The function <code>countOnline</code> should return <code>0</code> when the object <code>{ Alan: { online: false }, Jeff: { online: false }, Sarah: { online: false } }</code> is passed to it'
testString: assert(countOnline(usersObj3) === 0);
```
@@ -32,38 +40,60 @@ tests:
<div id='js-seed'>
```js
let users = {
Alan: {
age: 27,
online: false
},
Jeff: {
age: 32,
online: true
},
Sarah: {
age: 48,
online: false
},
Ryan: {
age: 19,
online: true
}
};
function countOnline(obj) {
function countOnline(usersObj) {
// change code below this line
// change code above this line
}
console.log(countOnline(users));
```
</div>
### After Tests
<div id='js-teardown'>
```js
const usersObj1 = {
Alan: {
online: false
},
Jeff: {
online: true
},
Sarah: {
online: false
}
}
const usersObj2 = {
Alan: {
online: true
},
Jeff: {
online: false
},
Sarah: {
online: true
}
}
const usersObj3 = {
Alan: {
online: false
},
Jeff: {
online: false
},
Sarah: {
online: false
}
}
```
</div>
</section>
@@ -71,6 +101,15 @@ console.log(countOnline(users));
<section id='solution'>
```js
// solution required
function countOnline(usersObj) {
let online = 0;
for(let user in usersObj){
if(usersObj[user].online) {
online++;
}
}
return online;
}
```
</section>

View File

@@ -2,27 +2,31 @@
id: 587d7b7d367417b2b2512b1f
title: Modify an Array Stored in an Object
challengeType: 1
videoUrl: ''
localeTitle: 'Измените массив, хранящийся в объекте'
forumTopicId: 301163
localeTitle: Измените массив, хранящийся в объекте
---
## Description
<section id="description"> Теперь вы видели все основные операции для объектов JavaScript. Вы можете добавлять, изменять и удалять пары ключ-значение, проверять наличие ключей и перебирать все ключи в объекте. По мере продолжения изучения JavaScript вы увидите еще более универсальные приложения объектов. Кроме того, дополнительные уроки Advanced Data Structures далее в учебной программе также охватывают объекты ES6 <dfn>Map</dfn> и <dfn>Set</dfn> , оба из которых похожи на обычные объекты, но предоставляют некоторые дополнительные функции. Теперь, когда вы изучили основы массивов и объектов, вы полностью готовы приступить к решению более сложных проблем с помощью JavaScript! </section>
<section id='description'>
Теперь вы видели все основные операции для объектов JavaScript. Вы можете добавлять, изменять и удалять пары ключ-значение, проверять наличие ключей и перебирать все ключи в объекте. По мере продолжения изучения JavaScript вы увидите еще более универсальные приложения объектов. Кроме того, дополнительные уроки Advanced Data Structures далее в учебной программе также охватывают объекты ES6 <dfn>Map</dfn> и <dfn>Set</dfn> , оба из которых похожи на обычные объекты, но предоставляют некоторые дополнительные функции. Теперь, когда вы изучили основы массивов и объектов, вы полностью готовы приступить к решению более сложных проблем с помощью JavaScript!
</section>
## Instructions
<section id="instructions"> Взгляните на объект, который мы предоставили в редакторе кода. <code>user</code> объект содержит три ключа. Ключ <code>data</code> содержит пять ключей, один из которых содержит массив <code>friends</code> . Из этого вы можете видеть, как гибкие объекты являются структурами данных. Мы начали писать функцию <code>addFriend</code> . Закончите запись, чтобы он взял объект <code>user</code> и добавил имя аргумента <code>friend</code> в массив, хранящийся в <code>user.data.friends</code> и возвращает этот массив. </section>
<section id='instructions'>
Взгляните на объект, который мы предоставили в редакторе кода. <code>user</code> объект содержит три ключа. Ключ <code>data</code> содержит пять ключей, один из которых содержит массив <code>friends</code> . Из этого вы можете видеть, как гибкие объекты являются структурами данных. Мы начали писать функцию <code>addFriend</code> . Закончите запись, чтобы он взял объект <code>user</code> и добавил имя аргумента <code>friend</code> в массив, хранящийся в <code>user.data.friends</code> и возвращает этот массив.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: '<code>user</code> объект имеет <code>name</code> , <code>age</code> и ключи <code>data</code>'
testString: 'assert("name" in user && "age" in user && "data" in user, "The <code>user</code> object has <code>name</code>, <code>age</code>, and <code>data</code> keys");'
- text: Функция <code>addFriend</code> принимает объект <code>user</code> и строку <code>friend</code> как аргументы и добавляет друга в массив <code>friends</code> в <code>user</code> объекте
testString: 'assert((function() { let L1 = user.data.friends.length; addFriend(user, "Sean"); let L2 = user.data.friends.length; return (L2 === L1 + 1); })(), "The <code>addFriend</code> function accepts a <code>user</code> object and a <code>friend</code> string as arguments and adds the friend to the array of <code>friends</code> in the <code>user</code> object");'
- text: '<code>addFriend(user, &quot;Pete&quot;)</code> должен вернуться <code>[&quot;Sam&quot;, &quot;Kira&quot;, &quot;Tomo&quot;, &quot;Pete&quot;]</code>'
testString: 'assert.deepEqual((function() { delete user.data.friends; user.data.friends = ["Sam", "Kira", "Tomo"]; return addFriend(user, "Pete") })(), ["Sam", "Kira", "Tomo", "Pete"], "<code>addFriend(user, "Pete")</code> should return <code>["Sam", "Kira", "Tomo", "Pete"]</code>");'
- text: The <code>user</code> object has <code>name</code>, <code>age</code>, and <code>data</code> keys
testString: assert('name' in user && 'age' in user && 'data' in user);
- text: The <code>addFriend</code> function accepts a <code>user</code> object and a <code>friend</code> string as arguments and adds the friend to the array of <code>friends</code> in the <code>user</code> object
testString: assert((function() { let L1 = user.data.friends.length; addFriend(user, 'Sean'); let L2 = user.data.friends.length; return (L2 === L1 + 1); })());
- text: <code>addFriend(user, "Pete")</code> should return <code>["Sam", "Kira", "Tomo", "Pete"]</code>
testString: assert.deepEqual((function() { delete user.data.friends; user.data.friends = ['Sam', 'Kira', 'Tomo']; return addFriend(user, 'Pete') })(), ['Sam', 'Kira', 'Tomo', 'Pete']);
```
@@ -66,14 +70,36 @@ console.log(addFriend(user, 'Pete'));
</div>
</section>
## Solution
<section id='solution'>
```js
// solution required
let user = {
name: 'Kenneth',
age: 28,
data: {
username: 'kennethCodesAllDay',
joinDate: 'March 26, 2016',
organization: 'freeCodeCamp',
friends: [
'Sam',
'Kira',
'Tomo'
],
location: {
city: 'San Francisco',
state: 'CA',
country: 'USA'
}
}
};
function addFriend(userObj, friend) {
userObj.data.friends.push(friend);
return userObj.data.friends;
}
```
</section>

View File

@@ -2,29 +2,33 @@
id: 587d7b7c367417b2b2512b19
title: Modify an Object Nested Within an Object
challengeType: 1
videoUrl: ''
localeTitle: 'Изменение объекта, вложенного в объект'
forumTopicId: 301164
localeTitle: Изменение объекта, вложенного в объект
---
## Description
<section id="description"> Теперь давайте посмотрим на несколько более сложный объект. Свойства объекта могут быть вложены в произвольную глубину, а их значениями могут быть любые типы данных, поддерживаемые JavaScript, включая массивы и даже другие объекты. Рассмотрим следующее: <blockquote> let inestedObject = { <br> id: 28802695164, <br> дата: «31 декабря 2016 года», <br> данные: { <br> totalUsers: 99, <br> онлайн: 80, <br> onlineStatus: { <br> активен: 67, <br> 13 гостей <br> } <br> } <br> }; </blockquote> <code>nestedObject</code> имеет три уникальных ключа: <code>id</code> , значение которого - число, <code>date</code> , значение которого является строкой, и <code>data</code> , значение которых является объектом, у которого есть еще один объект, вложенный в него. Хотя структуры могут быстро стать сложными, мы все равно можем использовать одни и те же обозначения для доступа к необходимой нам информации. </section>
<section id='description'>
Теперь давайте посмотрим на несколько более сложный объект. Свойства объекта могут быть вложены в произвольную глубину, а их значениями могут быть любые типы данных, поддерживаемые JavaScript, включая массивы и даже другие объекты. Рассмотрим следующее: <blockquote> let inestedObject = { <br> id: 28802695164, <br> дата: «31 декабря 2016 года», <br> данные: { <br> totalUsers: 99, <br> онлайн: 80, <br> onlineStatus: { <br> активен: 67, <br> 13 гостей <br> } <br> } <br> }; </blockquote> <code>nestedObject</code> имеет три уникальных ключа: <code>id</code> , значение которого - число, <code>date</code> , значение которого является строкой, и <code>data</code> , значение которых является объектом, у которого есть еще один объект, вложенный в него. Хотя структуры могут быстро стать сложными, мы все равно можем использовать одни и те же обозначения для доступа к необходимой нам информации.
</section>
## Instructions
<section id="instructions"> Здесь мы определили объект, <code>userActivity</code> , который включает в себя другой объект, вложенный в него. Вы можете изменять свойства этого вложенного объекта так же, как вы изменили свойства в последнем вызове. Установите значение <code>online</code> ключа на <code>45</code> . </section>
<section id='instructions'>
Здесь мы определили объект, <code>userActivity</code> , который включает в себя другой объект, вложенный в него. Вы можете изменять свойства этого вложенного объекта так же, как вы изменили свойства в последнем вызове. Установите значение <code>online</code> ключа на <code>45</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: '<code>userActivity</code> имеет <code>userActivity</code> <code>id</code> , <code>date</code> и <code>data</code>'
testString: 'assert("id" in userActivity && "date" in userActivity && "data" in userActivity, "<code>userActivity</code> has <code>id</code>, <code>date</code> and <code>data</code> properties");'
- text: <code>userActivity</code> имеет ключ <code>data</code> установленный для объекта с ключами <code>totalUsers</code> и <code>online</code>
testString: 'assert("totalUsers" in userActivity.data && "online" in userActivity.data, "<code>userActivity</code> has a <code>data</code> key set to an object with keys <code>totalUsers</code> and <code>online</code>");'
- text: <code>online</code> свойство вложенное в <code>data</code> ключе <code>userActivity</code> должно быть установлено на <code>45</code>
testString: 'assert(userActivity.data.online === 45, "The <code>online</code> property nested in the <code>data</code> key of <code>userActivity</code> should be set to <code>45</code>");'
- text: Свойство <code>online</code> задается с использованием точечной или скобочной записи
testString: 'assert.strictEqual(code.search(/online: 45/), -1, "The <code>online</code> property is set using dot or bracket notation");'
- text: <code>userActivity</code> has <code>id</code>, <code>date</code> and <code>data</code> properties
testString: assert('id' in userActivity && 'date' in userActivity && 'data' in userActivity);
- text: <code>userActivity</code> has a <code>data</code> key set to an object with keys <code>totalUsers</code> and <code>online</code>
testString: assert('totalUsers' in userActivity.data && 'online' in userActivity.data);
- text: The <code>online</code> property nested in the <code>data</code> key of <code>userActivity</code> should be set to <code>45</code>
testString: assert(userActivity.data.online === 45);
- text: The <code>online</code> property is set using dot or bracket notation
testString: 'assert.strictEqual(code.search(/online: 45/), -1);'
```
@@ -55,14 +59,22 @@ console.log(userActivity);
</div>
</section>
## Solution
<section id='solution'>
```js
// solution required
let userActivity = {
id: 23894201352,
date: 'January 1, 2017',
data: {
totalUsers: 51,
online: 42
}
};
userActivity.data.online = 45;
```
</section>

View File

@@ -2,27 +2,31 @@
id: 587d78b2367417b2b2512b0f
title: Remove Items from an Array with pop() and shift()
challengeType: 1
videoUrl: ''
forumTopicId: 301165
localeTitle: Удалите элементы из массива с помощью pop () и shift ()
---
## Description
<section id="description"> Оба <code>unshift()</code> <code>push()</code> и <code>unshift()</code> имеют соответствующие методы, которые являются почти функциональными противоположностями: <code>pop()</code> и <code>shift()</code> . Как вы уже догадались, вместо добавления <code>pop()</code> <em>удаляет</em> элемент из конца массива, а <code>shift()</code> удаляет элемент с самого начала. Ключевое различие между <code>pop()</code> и <code>shift()</code> и их кузенами <code>push()</code> и <code>unshift()</code> заключается в том, что ни один из методов не принимает параметры, и каждый из них позволяет только массиву изменять один элемент за раз. Давайте взглянем: <blockquote> let greetings = [&#39;whats up?&#39;, &#39;hello&#39;, &#39;see ya!&#39;]; <br><br> greetings.pop (); <br> // теперь равно [&#39;whats up?&#39;, &#39;hello&#39;] <br><br> greetings.shift (); <br> // теперь равно [&#39;hello&#39;] </blockquote> Мы также можем вернуть значение удаляемого элемента любым из следующих способов: <blockquote> let popped = greetings.pop (); <br> // возвращает &#39;hello&#39; <br> // приветствия теперь равны [] </blockquote></section>
<section id='description'>
Оба <code>unshift()</code> <code>push()</code> и <code>unshift()</code> имеют соответствующие методы, которые являются почти функциональными противоположностями: <code>pop()</code> и <code>shift()</code> . Как вы уже догадались, вместо добавления <code>pop()</code> <em>удаляет</em> элемент из конца массива, а <code>shift()</code> удаляет элемент с самого начала. Ключевое различие между <code>pop()</code> и <code>shift()</code> и их кузенами <code>push()</code> и <code>unshift()</code> заключается в том, что ни один из методов не принимает параметры, и каждый из них позволяет только массиву изменять один элемент за раз. Давайте взглянем: <blockquote> let greetings = [&#39;whats up?&#39;, &#39;hello&#39;, &#39;see ya!&#39;]; <br><br> greetings.pop (); <br> // теперь равно [&#39;whats up?&#39;, &#39;hello&#39;] <br><br> greetings.shift (); <br> // теперь равно [&#39;hello&#39;] </blockquote> Мы также можем вернуть значение удаляемого элемента любым из следующих способов: <blockquote> let popped = greetings.pop (); <br> // возвращает &#39;hello&#39; <br> // приветствия теперь равны [] </blockquote>
</section>
## Instructions
<section id="instructions"> Мы определили функцию <code>popShift</code> , которая принимает массив как аргумент и возвращает новый массив. Измените функцию, используя функции <code>pop()</code> и <code>shift()</code> , чтобы удалить первый и последний элементы массива аргументов и присвоить удаленные элементы соответствующим переменным, чтобы возвращаемый массив содержал их значения. </section>
<section id='instructions'>
Мы определили функцию <code>popShift</code> , которая принимает массив как аргумент и возвращает новый массив. Измените функцию, используя функции <code>pop()</code> и <code>shift()</code> , чтобы удалить первый и последний элементы массива аргументов и присвоить удаленные элементы соответствующим переменным, чтобы возвращаемый массив содержал их значения.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: '<code>popShift([&quot;challenge&quot;, &quot;is&quot;, &quot;not&quot;, &quot;complete&quot;])</code> должен возвращать <code>[&quot;challenge&quot;, &quot;complete&quot;]</code>'
testString: 'assert.deepEqual(popShift(["challenge", "is", "not", "complete"]), ["challenge", "complete"], "<code>popShift(["challenge", "is", "not", "complete"])</code> should return <code>["challenge", "complete"]</code>");'
- text: Функция <code>popShift</code> должна использовать метод <code>pop()</code>
testString: 'assert.notStrictEqual(popShift.toString().search(/\.pop\(/), -1, "The <code>popShift</code> function should utilize the <code>pop()</code> method");'
- text: Функция <code>popShift</code> должна использовать метод <code>shift()</code>
testString: 'assert.notStrictEqual(popShift.toString().search(/\.shift\(/), -1, "The <code>popShift</code> function should utilize the <code>shift()</code> method");'
- text: <code>popShift(["challenge", "is", "not", "complete"])</code> should return <code>["challenge", "complete"]</code>
testString: assert.deepEqual(popShift(['challenge', 'is', 'not', 'complete']), ["challenge", "complete"]);
- text: The <code>popShift</code> function should utilize the <code>pop()</code> method
testString: assert.notStrictEqual(popShift.toString().search(/\.pop\(/), -1);
- text: The <code>popShift</code> function should utilize the <code>shift()</code> method
testString: assert.notStrictEqual(popShift.toString().search(/\.shift\(/), -1);
```
@@ -47,14 +51,17 @@ console.log(popShift(['challenge', 'is', 'not', 'complete']));
</div>
</section>
## Solution
<section id='solution'>
```js
// solution required
function popShift(arr) {
let popped = arr.pop(); // change this line
let shifted = arr.shift(); // change this line
return [shifted, popped];
}
```
</section>

View File

@@ -2,25 +2,29 @@
id: 587d78b2367417b2b2512b10
title: Remove Items Using splice()
challengeType: 1
videoUrl: ''
forumTopicId: 301166
localeTitle: Удаление элементов с помощью splice ()
---
## Description
<section id="description"> Итак, мы научились удалять элементы с начала и конца массивов с помощью <code>shift()</code> и <code>pop()</code> , но что, если мы хотим удалить элемент из где-то посередине? Или удалить сразу несколько элементов? Ну, вот где <code>splice()</code> приходит. <code>splice()</code> позволяет нам сделать это: <strong>удалить любое количество последовательных элементов</strong> из любого места в массиве. <code>splice()</code> может принимать до 3 параметров, но на данный момент мы сосредоточимся только на первом 2. Первые два параметра <code>splice()</code> представляют собой целые числа, которые представляют индексы или позиции массива, который является <code>splice()</code> призвал. И помните, массивы <em>нуль-индексируются</em> , поэтому, чтобы указать первый элемент массива, мы будем использовать <code>0</code> . Первый параметр <code>splice()</code> представляет собой индекс в массиве, из которого начинается удаление элементов, а второй параметр указывает количество удаляемых элементов. Например: <blockquote> пусть array = [&#39;today&#39;, &#39;was&#39;, &#39;not&#39;, &#39;so&#39;, &#39;great&#39;]; <br><br> array.splice (2, 2); <br> // удалить 2 элемента, начиная с 3-го элемента <br> // массив теперь равен [&#39;today&#39;, &#39;was&#39;, &#39;great&#39;] </blockquote> <code>splice()</code> не только изменяет массив, на который он вызывается, но также возвращает новый массив, содержащий значение удаленных элементов: <blockquote> пусть array = [&#39;I&#39;, &#39;am&#39;, &#39;feeling&#39;, &#39;really&#39;, &#39;happy&#39;]; <br><br> пусть newArray = array.splice (3, 2); <br> // newArray равно [&#39;really&#39;, &#39;happy&#39;] </blockquote></section>
<section id='description'>
Итак, мы научились удалять элементы с начала и конца массивов с помощью <code>shift()</code> и <code>pop()</code> , но что, если мы хотим удалить элемент из где-то посередине? Или удалить сразу несколько элементов? Ну, вот где <code>splice()</code> приходит. <code>splice()</code> позволяет нам сделать это: <strong>удалить любое количество последовательных элементов</strong> из любого места в массиве. <code>splice()</code> может принимать до 3 параметров, но на данный момент мы сосредоточимся только на первом 2. Первые два параметра <code>splice()</code> представляют собой целые числа, которые представляют индексы или позиции массива, который является <code>splice()</code> призвал. И помните, массивы <em>нуль-индексируются</em> , поэтому, чтобы указать первый элемент массива, мы будем использовать <code>0</code> . Первый параметр <code>splice()</code> представляет собой индекс в массиве, из которого начинается удаление элементов, а второй параметр указывает количество удаляемых элементов. Например: <blockquote> пусть array = [&#39;today&#39;, &#39;was&#39;, &#39;not&#39;, &#39;so&#39;, &#39;great&#39;]; <br><br> array.splice (2, 2); <br> // удалить 2 элемента, начиная с 3-го элемента <br> // массив теперь равен [&#39;today&#39;, &#39;was&#39;, &#39;great&#39;] </blockquote> <code>splice()</code> не только изменяет массив, на который он вызывается, но также возвращает новый массив, содержащий значение удаленных элементов: <blockquote> пусть array = [&#39;I&#39;, &#39;am&#39;, &#39;feeling&#39;, &#39;really&#39;, &#39;happy&#39;]; <br><br> пусть newArray = array.splice (3, 2); <br> // newArray равно [&#39;really&#39;, &#39;happy&#39;] </blockquote>
</section>
## Instructions
<section id="instructions"> Мы определили функцию <code>sumOfTen</code> , которая принимает массив как аргумент и возвращает сумму элементов этого массива. Измените функцию, используя <code>splice()</code> , чтобы она вернула значение <code>10</code> . </section>
<section id='instructions'>
Мы определили функцию <code>sumOfTen</code> , которая принимает массив как аргумент и возвращает сумму элементов этого массива. Измените функцию, используя <code>splice()</code> , чтобы она вернула значение <code>10</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>sumOfTen</code> должен вернуть 10
testString: 'assert.strictEqual(sumOfTen([2, 5, 1, 5, 2, 1]), 10, "<code>sumOfTen</code> should return 10");'
- text: Функция <code>sumOfTen</code> должна использовать метод <code>splice()</code>
testString: 'assert.notStrictEqual(sumOfTen.toString().search(/\.splice\(/), -1, "The <code>sumOfTen</code> function should utilize the <code>splice()</code> method");'
- text: <code>sumOfTen</code> should return 10
testString: assert.strictEqual(sumOfTen([2, 5, 1, 5, 2, 1]), 10);
- text: The <code>sumOfTen</code> function should utilize the <code>splice()</code> method
testString: assert.notStrictEqual(sumOfTen.toString().search(/\.splice\(/), -1);
```
@@ -46,14 +50,16 @@ console.log(sumOfTen([2, 5, 1, 5, 2, 1]));
</div>
</section>
## Solution
<section id='solution'>
```js
// solution required
function sumOfTen(arr) {
arr.splice(2,2);
return arr.reduce((a, b) => a + b);
}
```
</section>

View File

@@ -2,31 +2,35 @@
id: 587d7b7e367417b2b2512b20
title: Use an Array to Store a Collection of Data
challengeType: 1
videoUrl: ''
forumTopicId: 301167
localeTitle: Используйте массив для хранения коллекции данных
---
## Description
<section id="description"> Ниже приведен пример простейшей реализации структуры данных массива. Это известно как <dfn>одномерный массив</dfn> , что означает, что он имеет только один уровень, или что он не имеет других массивов, вложенных в него. Обратите внимание, что он содержит <dfn>булевы</dfn> , <dfn>строки</dfn> и <dfn>числа</dfn> , среди прочих допустимых типов данных JavaScript: <blockquote> let simpleArray = [&#39;one&#39;, 2, &#39;three&#39;, true, false, undefined, null]; <br> console.log (simpleArray.length); <br> // журналы 7 </blockquote> У всех массивов есть свойство length, которое, как показано выше, может быть очень легко доступно с помощью синтаксиса <code>Array.length</code> . Более сложную реализацию массива можно увидеть ниже. Это известно как <dfn>многомерный массив</dfn> или массив, содержащий другие массивы. Обратите внимание, что этот массив также содержит <dfn>объекты</dfn> JavaScript, которые мы рассмотрим очень внимательно в следующем разделе, но пока все, что вам нужно знать, это то, что массивы также способны хранить сложные объекты. <blockquote> пусть complexArray = [ <br> [ <br> { <br> один: 1, <br> два: 2 <br> }, <br> { <br> три: 3, <br> четыре: 4 <br> } <br> ], <br> [ <br> { <br> a: &quot;a&quot;, <br> b: &quot;b&quot; <br> }, <br> { <br> c: &quot;c&quot;, <br> d: &quot;d&quot; <br> } <br> ] <br> ]; </blockquote></section>
<section id='description'>
Ниже приведен пример простейшей реализации структуры данных массива. Это известно как <dfn>одномерный массив</dfn> , что означает, что он имеет только один уровень, или что он не имеет других массивов, вложенных в него. Обратите внимание, что он содержит <dfn>булевы</dfn> , <dfn>строки</dfn> и <dfn>числа</dfn> , среди прочих допустимых типов данных JavaScript: <blockquote> let simpleArray = [&#39;one&#39;, 2, &#39;three&#39;, true, false, undefined, null]; <br> console.log (simpleArray.length); <br> // журналы 7 </blockquote> У всех массивов есть свойство length, которое, как показано выше, может быть очень легко доступно с помощью синтаксиса <code>Array.length</code> . Более сложную реализацию массива можно увидеть ниже. Это известно как <dfn>многомерный массив</dfn> или массив, содержащий другие массивы. Обратите внимание, что этот массив также содержит <dfn>объекты</dfn> JavaScript, которые мы рассмотрим очень внимательно в следующем разделе, но пока все, что вам нужно знать, это то, что массивы также способны хранить сложные объекты. <blockquote> пусть complexArray = [ <br> [ <br> { <br> один: 1, <br> два: 2 <br> }, <br> { <br> три: 3, <br> четыре: 4 <br> } <br> ], <br> [ <br> { <br> a: &quot;a&quot;, <br> b: &quot;b&quot; <br> }, <br> { <br> c: &quot;c&quot;, <br> d: &quot;d&quot; <br> } <br> ] <br> ]; </blockquote>
</section>
## Instructions
<section id="instructions"> Мы определили переменную, называемую <code>yourArray</code> . Заполните инструкцию, присвоив массив из не менее 5 элементов в длину переменной <code>yourArray</code> . Ваш массив должен содержать по крайней мере одну <dfn>строку</dfn> , одно <dfn>число</dfn> и одно <dfn>логическое значение</dfn> . </section>
<section id='instructions'>
Мы определили переменную, называемую <code>yourArray</code> . Заполните инструкцию, присвоив массив из не менее 5 элементов в длину переменной <code>yourArray</code> . Ваш массив должен содержать по крайней мере одну <dfn>строку</dfn> , одно <dfn>число</dfn> и одно <dfn>логическое значение</dfn> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: yourArray - массив
testString: 'assert.strictEqual(Array.isArray(yourArray), true, "yourArray is an array");'
- text: <code>yourArray</code> имеет <code>yourArray</code> не менее 5 элементов
testString: 'assert.isAtLeast(yourArray.length, 5, "<code>yourArray</code> is at least 5 elements long");'
- text: <code>yourArray</code> содержит как минимум одно <code>boolean</code>
testString: 'assert(yourArray.filter( el => typeof el === "boolean").length >= 1, "<code>yourArray</code> contains at least one <code>boolean</code>");'
- text: <code>yourArray</code> содержит хотя бы одно <code>number</code>
testString: 'assert(yourArray.filter( el => typeof el === "number").length >= 1, "<code>yourArray</code> contains at least one <code>number</code>");'
- text: <code>yourArray</code> содержит хотя бы одну <code>string</code>
testString: 'assert(yourArray.filter( el => typeof el === "string").length >= 1, "<code>yourArray</code> contains at least one <code>string</code>");'
- text: yourArray is an array
testString: assert.strictEqual(Array.isArray(yourArray), true);
- text: <code>yourArray</code> is at least 5 elements long
testString: assert.isAtLeast(yourArray.length, 5);
- text: <code>yourArray</code> contains at least one <code>boolean</code>
testString: assert(yourArray.filter( el => typeof el === 'boolean').length >= 1);
- text: <code>yourArray</code> contains at least one <code>number</code>
testString: assert(yourArray.filter( el => typeof el === 'number').length >= 1);
- text: <code>yourArray</code> contains at least one <code>string</code>
testString: assert(yourArray.filter( el => typeof el === 'string').length >= 1);
```
@@ -44,14 +48,13 @@ let yourArray; // change this line
</div>
</section>
## Solution
<section id='solution'>
```js
// solution required
let yourArray = ['a string', 100, true, ['one', 2], 'another string'];
```
</section>

View File

@@ -2,25 +2,29 @@
id: 587d7b7c367417b2b2512b1b
title: Use the delete Keyword to Remove Object Properties
challengeType: 1
videoUrl: ''
forumTopicId: 301168
localeTitle: Использование ключа удаления для удаления свойств объекта
---
## Description
<section id="description"> Теперь вы знаете, какие объекты и их основные функции и преимущества. Короче говоря, это хранилища с ключевыми значениями, которые обеспечивают гибкий, интуитивно понятный способ структурирования данных <strong><em>и</em></strong> обеспечивают очень быстрое время поиска. Во всех остальных задачах мы опишем несколько общих операций, которые вы можете выполнять на объектах, чтобы вы могли комфортно применять эти полезные структуры данных в своих программах. В более ранних задачах мы добавили и модифицировали пары ключ-значение объекта. Здесь мы увидим, как мы можем <em>удалить</em> пару ключ-значение из объекта. Давайте вернемся к примеру нашего <code>foods</code> последний раз. Если мы хотим удалить ключ <code>apples</code> , мы можем удалить его, используя ключевое слово <code>delete</code> : <blockquote> удалять пищу. </blockquote></section>
<section id='description'>
Теперь вы знаете, какие объекты и их основные функции и преимущества. Короче говоря, это хранилища с ключевыми значениями, которые обеспечивают гибкий, интуитивно понятный способ структурирования данных <strong><em>и</em></strong> обеспечивают очень быстрое время поиска. Во всех остальных задачах мы опишем несколько общих операций, которые вы можете выполнять на объектах, чтобы вы могли комфортно применять эти полезные структуры данных в своих программах. В более ранних задачах мы добавили и модифицировали пары ключ-значение объекта. Здесь мы увидим, как мы можем <em>удалить</em> пару ключ-значение из объекта. Давайте вернемся к примеру нашего <code>foods</code> последний раз. Если мы хотим удалить ключ <code>apples</code> , мы можем удалить его, используя ключевое слово <code>delete</code> : <blockquote> удалять пищу. </blockquote>
</section>
## Instructions
<section id="instructions"> Используйте ключевое слово delete для удаления <code>oranges</code> , <code>plums</code> и <code>strawberries</code> ключей из объекта <code>foods</code> . </section>
<section id='instructions'>
Используйте ключевое слово delete для удаления <code>oranges</code> , <code>plums</code> и <code>strawberries</code> ключей из объекта <code>foods</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: 'Объект <code>foods</code> имеет только три ключа: <code>apples</code> , <code>grapes</code> и <code>bananas</code>'
testString: 'assert(!foods.hasOwnProperty("oranges") && !foods.hasOwnProperty("plums") && !foods.hasOwnProperty("strawberries") && Object.keys(foods).length === 3, "The <code>foods</code> object only has three keys: <code>apples</code>, <code>grapes</code>, and <code>bananas</code>");'
- text: '<code>oranges</code> , <code>plums</code> и <code>strawberries</code> ключи удаляются с помощью <code>delete</code>'
testString: 'assert(code.search(/oranges:/) !== -1 && code.search(/plums:/) !== -1 && code.search(/strawberries:/) !== -1, "The <code>oranges</code>, <code>plums</code>, and <code>strawberries</code> keys are removed using <code>delete</code>");'
- text: 'The <code>foods</code> object only has three keys: <code>apples</code>, <code>grapes</code>, and <code>bananas</code>'
testString: assert(!foods.hasOwnProperty('oranges') && !foods.hasOwnProperty('plums') && !foods.hasOwnProperty('strawberries') && Object.keys(foods).length === 3);
- text: The <code>oranges</code>, <code>plums</code>, and <code>strawberries</code> keys are removed using <code>delete</code>
testString: assert(code.search(/oranges:/) !== -1 && code.search(/plums:/) !== -1 && code.search(/strawberries:/) !== -1);
```
@@ -51,8 +55,6 @@ console.log(foods);
</div>
</section>
## Solution
@@ -60,5 +62,20 @@ console.log(foods);
```js
// solution required
let foods = {
apples: 25,
oranges: 32,
plums: 28,
bananas: 13,
grapes: 35,
strawberries: 27
};
delete foods.oranges;
delete foods.plums;
delete foods.strawberries;
console.log(foods);
```
</section>

View File

@@ -2,25 +2,30 @@
id: 56bbb991ad1ed5201cd392ca
title: Access Array Data with Indexes
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/cBZQbTz
forumTopicId: 16158
localeTitle: Доступ к массиву данных с индексами
---
## Description
<section id="description"> Мы можем получить доступ к данным внутри массивов с помощью <code>indexes</code> . Индексы массива записываются в одну и ту же скобку, в которой используются строки, за исключением того, что вместо указания символа они указывают запись в массиве. Подобно строкам, массивы используют индексирование с <dfn>нулевым</dfn> индексом, поэтому первым элементом в массиве является элемент <code>0</code> . <strong>пример</strong> <blockquote> var array = [50,60,70]; <br> массив [0]; // равно 50 <br> var data = array [1]; // равно 60 </blockquote> <strong>Заметка</strong> <br> Между именем массива и квадратными скобками не должно быть пробелов, например <code>array [0]</code> . Хотя JavaScript способен корректно обрабатывать, это может смутить других программистов, читающих ваш код. </section>
<section id='description'>
Мы можем получить доступ к данным внутри массивов с помощью <code>indexes</code> . Индексы массива записываются в одну и ту же скобку, в которой используются строки, за исключением того, что вместо указания символа они указывают запись в массиве. Подобно строкам, массивы используют индексирование с <dfn>нулевым</dfn> индексом, поэтому первым элементом в массиве является элемент <code>0</code> . <strong>пример</strong> <blockquote> var array = [50,60,70]; <br> массив [0]; // равно 50 <br> var data = array [1]; // равно 60 </blockquote> <strong>Заметка</strong> <br> Между именем массива и квадратными скобками не должно быть пробелов, например <code>array [0]</code> . Хотя JavaScript способен корректно обрабатывать, это может смутить других программистов, читающих ваш код.
</section>
## Instructions
<section id="instructions"> Создайте переменную <code>myData</code> и установите ее равным первому значению <code>myArray</code> используя нотацию в виде скобок. </section>
<section id='instructions'>
Создайте переменную <code>myData</code> и установите ее равным первому значению <code>myArray</code> используя нотацию в виде скобок.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: Переменная <code>myData</code> должна равняться первому значению <code>myArray</code> .
testString: 'assert((function(){if(typeof myArray !== "undefined" && typeof myData !== "undefined" && myArray[0] === myData){return true;}else{return false;}})(), "The variable <code>myData</code> should equal the first value of <code>myArray</code>.");'
- text: Данные в переменной <code>myArray</code> должны быть доступны с использованием нотации в виде скобок.
testString: 'assert((function(){if(code.match(/\s*=\s*myArray\[0\]/g)){return true;}else{return false;}})(), "The data in variable <code>myArray</code> should be accessed using bracket notation.");'
- text: The variable <code>myData</code> should equal the first value of <code>myArray</code>.
testString: assert((function(){if(typeof myArray !== 'undefined' && typeof myData !== 'undefined' && myArray[0] === myData){return true;}else{return false;}})());
- text: The data in variable <code>myArray</code> should be accessed using bracket notation.
testString: assert((function(){if(code.match(/\s*=\s*myArray\[0\]/g)){return true;}else{return false;}})());
```
@@ -45,12 +50,12 @@ var myArray = [50,60,70];
</div>
### After Test
### After Tests
<div id='js-teardown'>
```js
console.info('after the test');
if(typeof myArray !== "undefined" && typeof myData !== "undefined"){(function(y,z){return 'myArray = ' + JSON.stringify(y) + ', myData = ' + JSON.stringify(z);})(myArray, myData);}
```
</div>
@@ -61,6 +66,8 @@ console.info('after the test');
<section id='solution'>
```js
// solution required
var myArray = [50,60,70];
var myData = myArray[0];
```
</section>

View File

@@ -2,25 +2,30 @@
id: 56592a60ddddeae28f7aa8e1
title: Access Multi-Dimensional Arrays With Indexes
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/ckND4Cq
forumTopicId: 16159
localeTitle: Доступ к многомерным массивам с индексами
---
## Description
<section id="description"> Один из способов думать о <dfn>многомерном</dfn> массиве - это <em>массив массивов</em> . Когда вы используете скобки для доступа к вашему массиву, первый набор скобок ссылается на записи в массиве внешнего (первого уровня), а каждая дополнительная пара скобок ссылается на следующий уровень записей внутри. <strong>пример</strong> <blockquote> var arr = [ <br> [1,2,3], <br> [4,5,6], <br> [7,8,9], <br> [[10,11,12], 13, 14] <br> ]; <br> обр [3]; // равно [[10,11,12], 13, 14] <br> обр [3] [0]; // равно [10,11,12] <br> обр [3] [0] [1]; // равно 11 </blockquote> <strong>Заметка</strong> <br> Между именем массива и квадратными скобками не должно быть пробелов, например <code>array [0][0]</code> и даже этот <code>array [0] [0]</code> недопустим. Хотя JavaScript способен корректно обрабатывать, это может смутить других программистов, читающих ваш код. </section>
<section id='description'>
Один из способов думать о <dfn>многомерном</dfn> массиве - это <em>массив массивов</em> . Когда вы используете скобки для доступа к вашему массиву, первый набор скобок ссылается на записи в массиве внешнего (первого уровня), а каждая дополнительная пара скобок ссылается на следующий уровень записей внутри. <strong>пример</strong> <blockquote> var arr = [ <br> [1,2,3], <br> [4,5,6], <br> [7,8,9], <br> [[10,11,12], 13, 14] <br> ]; <br> обр [3]; // равно [[10,11,12], 13, 14] <br> обр [3] [0]; // равно [10,11,12] <br> обр [3] [0] [1]; // равно 11 </blockquote> <strong>Заметка</strong> <br> Между именем массива и квадратными скобками не должно быть пробелов, например <code>array [0][0]</code> и даже этот <code>array [0] [0]</code> недопустим. Хотя JavaScript способен корректно обрабатывать, это может смутить других программистов, читающих ваш код.
</section>
## Instructions
<section id="instructions"> Используя нотацию с помощью скобок, выберите элемент из <code>myArray</code> таким образом, чтобы <code>myData</code> был равен <code>8</code> . </section>
<section id='instructions'>
Используя нотацию с помощью скобок, выберите элемент из <code>myArray</code> таким образом, чтобы <code>myData</code> был равен <code>8</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>myData</code> должен быть равен <code>8</code> .
testString: 'assert(myData === 8, "<code>myData</code> should be equal to <code>8</code>.");'
- text: Для чтения правильного значения из <code>myArray</code> вы должны использовать условное обозначение.
testString: 'assert(/myArray\[2\]\[1\]/g.test(code) && !/myData\s*=\s*(?:.*[-+*/%]|\d)/g.test(code), "You should be using bracket notation to read the correct value from <code>myArray</code>.");'
- text: <code>myData</code> should be equal to <code>8</code>.
testString: assert(myData === 8);
- text: You should be using bracket notation to read the correct value from <code>myArray</code>.
testString: assert(/myData=myArray\[2\]\[1\]/.test(code.replace(/\s/g, '')));
```
@@ -42,12 +47,12 @@ var myData = myArray[0][0];
</div>
### After Test
### After Tests
<div id='js-teardown'>
```js
console.info('after the test');
if(typeof myArray !== "undefined"){(function(){return "myData: " + myData + " myArray: " + JSON.stringify(myArray);})();}
```
</div>
@@ -58,6 +63,8 @@ console.info('after the test');
<section id='solution'>
```js
// solution required
var myArray = [[1,2,3],[4,5,6], [7,8,9], [[10,11,12], 13, 14]];
var myData = myArray[2][1];
```
</section>

View File

@@ -2,25 +2,30 @@
id: 56533eb9ac21ba0edf2244cd
title: Accessing Nested Arrays
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/cLeGDtZ
forumTopicId: 16160
localeTitle: Доступ к вложенным массивам
---
## Description
<section id="description"> Как мы видели в предыдущих примерах, объекты могут содержать как вложенные объекты, так и вложенные массивы. Подобно доступу к вложенным объектам, нотация матричного массива может быть привязана для доступа к вложенным массивам. Ниже приведен пример доступа к вложенному массиву: <blockquote> var ourPets = [ <br> { <br> animalType: &quot;cat&quot;, <br> имена: [ <br> &quot;Meowzer&quot;, <br> «Пушистый», <br> «Кит-Кат» <br> ] <br> }, <br> { <br> animalType: «собака», <br> имена: [ <br> &quot;Место&quot;, <br> &quot;Bowser&quot;, <br> «Фрэнки» <br> ] <br> } <br> ]; <br> ourPets [0] .names [1]; // &quot;Пушистый&quot; <br> ourPets [1] .names [0]; // &quot;Место&quot; </blockquote></section>
<section id='description'>
Как мы видели в предыдущих примерах, объекты могут содержать как вложенные объекты, так и вложенные массивы. Подобно доступу к вложенным объектам, нотация матричного массива может быть привязана для доступа к вложенным массивам. Ниже приведен пример доступа к вложенному массиву: <blockquote> var ourPets = [ <br> { <br> animalType: &quot;cat&quot;, <br> имена: [ <br> &quot;Meowzer&quot;, <br> «Пушистый», <br> «Кит-Кат» <br> ] <br> }, <br> { <br> animalType: «собака», <br> имена: [ <br> &quot;Место&quot;, <br> &quot;Bowser&quot;, <br> «Фрэнки» <br> ] <br> } <br> ]; <br> ourPets [0] .names [1]; // &quot;Пушистый&quot; <br> ourPets [1] .names [0]; // &quot;Место&quot; </blockquote>
</section>
## Instructions
<section id="instructions"> <code>myPlants</code> второе дерево из переменной <code>myPlants</code> используя <code>myPlants</code> объектов dot и массива. </section>
<section id='instructions'>
<code>myPlants</code> второе дерево из переменной <code>myPlants</code> используя <code>myPlants</code> объектов dot и массива.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>secondTree</code> должен равняться &quot;сосне&quot;
testString: 'assert(secondTree === "pine", "<code>secondTree</code> should equal "pine"");'
- text: Используйте обозначения точек и скобок для доступа к <code>myPlants</code>
testString: 'assert(/=\s*myPlants\[1\].list\[1\]/.test(code), "Use dot and bracket notation to access <code>myPlants</code>");'
- text: <code>secondTree</code> should equal "pine"
testString: assert(secondTree === "pine");
- text: Use dot and bracket notation to access <code>myPlants</code>
testString: assert(/=\s*myPlants\[1\].list\[1\]/.test(code));
```
@@ -60,12 +65,17 @@ var secondTree = ""; // Change this line
</div>
### After Test
### After Tests
<div id='js-teardown'>
```js
console.info('after the test');
(function(x) {
if(typeof x != 'undefined') {
return "secondTree = " + x;
}
return "secondTree is undefined";
})(secondTree);
```
</div>
@@ -76,6 +86,28 @@ console.info('after the test');
<section id='solution'>
```js
// solution required
var myPlants = [
{
type: "flowers",
list: [
"rose",
"tulip",
"dandelion"
]
},
{
type: "trees",
list: [
"fir",
"pine",
"birch"
]
}
];
// Only change code below this line
var secondTree = myPlants[1].list[1];
```
</section>

View File

@@ -2,25 +2,30 @@
id: 56533eb9ac21ba0edf2244cc
title: Accessing Nested Objects
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/cRnRnfa
forumTopicId: 16161
localeTitle: Доступ к вложенным объектам
---
## Description
<section id="description"> Доступ к дополнительным свойствам объектов можно получить, объединив нотацию точки или скобки. Вот вложенный объект: <blockquote> var ourStorage = { <br> &quot;стол письменный&quot;: { <br> «ящик»: «степлер» <br> }, <br> «кабинет»: { <br> &quot;верхний ящик&quot;: { <br> «folder1»: «файл», <br> &quot;folder2&quot;: &quot;секреты&quot; <br> }, <br> «нижний ящик»: «сода» <br> } <br> }; <br> ourStorage.cabinet [&quot;верхний ящик&quot;]. folder2; // &quot;секреты&quot; <br> ourStorage.desk.drawer; // &quot;степлер&quot; </blockquote></section>
<section id='description'>
Доступ к дополнительным свойствам объектов можно получить, объединив нотацию точки или скобки. Вот вложенный объект: <blockquote> var ourStorage = { <br> &quot;стол письменный&quot;: { <br> «ящик»: «степлер» <br> }, <br> «кабинет»: { <br> &quot;верхний ящик&quot;: { <br> «folder1»: «файл», <br> &quot;folder2&quot;: &quot;секреты&quot; <br> }, <br> «нижний ящик»: «сода» <br> } <br> }; <br> ourStorage.cabinet [&quot;верхний ящик&quot;]. folder2; // &quot;секреты&quot; <br> ourStorage.desk.drawer; // &quot;степлер&quot; </blockquote>
</section>
## Instructions
<section id="instructions"> Войдите в объект <code>myStorage</code> и назначьте содержимое свойства <code>glove box</code> переменной <code>gloveBoxContents</code> . Используйте обозначения в виде скобок для свойств с пробелом в их имени. </section>
<section id='instructions'>
Войдите в объект <code>myStorage</code> и назначьте содержимое свойства <code>glove box</code> переменной <code>gloveBoxContents</code> . Используйте обозначения в виде скобок для свойств с пробелом в их имени.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>gloveBoxContents</code> должен равняться &quot;картам&quot;
testString: 'assert(gloveBoxContents === "maps", "<code>gloveBoxContents</code> should equal "maps"");'
- text: Используйте обозначения точек и скобок для доступа к <code>myStorage</code>
testString: 'assert(/=\s*myStorage\.car\.inside\[\s*("|")glove box\1\s*\]/g.test(code), "Use dot and bracket notation to access <code>myStorage</code>");'
- text: <code>gloveBoxContents</code> should equal "maps"
testString: assert(gloveBoxContents === "maps");
- text: Use dot and bracket notation to access <code>myStorage</code>
testString: assert(/=\s*myStorage\.car\.inside\[\s*("|')glove box\1\s*\]/g.test(code));
```
@@ -51,12 +56,17 @@ var gloveBoxContents = undefined; // Change this line
</div>
### After Test
### After Tests
<div id='js-teardown'>
```js
console.info('after the test');
(function(x) {
if(typeof x != 'undefined') {
return "gloveBoxContents = " + x;
}
return "gloveBoxContents is undefined";
})(gloveBoxContents);
```
</div>
@@ -67,6 +77,18 @@ console.info('after the test');
<section id='solution'>
```js
// solution required
var myStorage = {
"car":{
"inside":{
"glove box":"maps",
"passenger seat":"crumbs"
},
"outside":{
"trunk":"jack"
}
}
};
var gloveBoxContents = myStorage.car.inside["glove box"];
```
</section>

View File

@@ -2,31 +2,36 @@
id: 56533eb9ac21ba0edf2244c8
title: Accessing Object Properties with Bracket Notation
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/cBvmEHP
forumTopicId: 16163
localeTitle: Доступ к объектным свойствам с помощью скобок
---
## Description
<section id="description"> Второй способ доступа к свойствам объекта - это скобки нотации ( <code>[]</code> ). Если свойство объекта, к которому вы пытаетесь получить доступ, имеет пробел в своем имени, вам нужно будет использовать нотацию в виде скобок. Тем не менее, вы все равно можете использовать нотацию нот для объектов без пробелов. Ниже приведен пример использования обозначения скобок для чтения свойства объекта: <blockquote> var myObj = { <br> «Space Name»: «Kirk», <br> «Больше пространства»: «Спок», <br> «NoSpace»: «USS Enterprise» <br> }; <br> myObj [&quot;Space Name&quot;]; // Кирк <br> myObj [&#39;More Space&#39;]; // Спок <br> myObj [ &quot;NoSpace&quot;]; // USS Enterprise </blockquote> Обратите внимание, что имена свойств с пробелами в них должны быть в кавычках (один или два). </section>
<section id='description'>
Второй способ доступа к свойствам объекта - это скобки нотации ( <code>[]</code> ). Если свойство объекта, к которому вы пытаетесь получить доступ, имеет пробел в своем имени, вам нужно будет использовать нотацию в виде скобок. Тем не менее, вы все равно можете использовать нотацию нот для объектов без пробелов. Ниже приведен пример использования обозначения скобок для чтения свойства объекта: <blockquote> var myObj = { <br> «Space Name»: «Kirk», <br> «Больше пространства»: «Спок», <br> «NoSpace»: «USS Enterprise» <br> }; <br> myObj [&quot;Space Name&quot;]; // Кирк <br> myObj [&#39;More Space&#39;]; // Спок <br> myObj [ &quot;NoSpace&quot;]; // USS Enterprise </blockquote> Обратите внимание, что имена свойств с пробелами в них должны быть в кавычках (один или два).
</section>
## Instructions
<section id="instructions"> Прочитайте значения свойств <code>&quot;an entree&quot;</code> и <code>&quot;the drink&quot;</code> <code>testObj</code> с использованием скобкой и назначьте их <code>entreeValue</code> и <code>drinkValue</code> соответственно. </section>
<section id='instructions'>
Прочитайте значения свойств <code>&quot;an entree&quot;</code> и <code>&quot;the drink&quot;</code> <code>testObj</code> с использованием скобкой и назначьте их <code>entreeValue</code> и <code>drinkValue</code> соответственно.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>entreeValue</code> должен быть строкой
testString: 'assert(typeof entreeValue === "string" , "<code>entreeValue</code> should be a string");'
- text: Значение <code>entreeValue</code> должно быть <code>&quot;hamburger&quot;</code>
testString: 'assert(entreeValue === "hamburger" , "The value of <code>entreeValue</code> should be <code>"hamburger"</code>");'
- text: <code>drinkValue</code> должен быть строкой
testString: 'assert(typeof drinkValue === "string" , "<code>drinkValue</code> should be a string");'
- text: Значение <code>drinkValue</code> должно быть <code>&quot;water&quot;</code>
testString: 'assert(drinkValue === "water" , "The value of <code>drinkValue</code> should be <code>"water"</code>");'
- text: Вы должны дважды использовать скобки
testString: 'assert(code.match(/testObj\s*?\[("|")[^""]+\1\]/g).length > 1, "You should use bracket notation twice");'
- text: <code>entreeValue</code> should be a string
testString: assert(typeof entreeValue === 'string' );
- text: The value of <code>entreeValue</code> should be <code>"hamburger"</code>
testString: assert(entreeValue === 'hamburger' );
- text: <code>drinkValue</code> should be a string
testString: assert(typeof drinkValue === 'string' );
- text: The value of <code>drinkValue</code> should be <code>"water"</code>
testString: assert(drinkValue === 'water' );
- text: You should use bracket notation twice
testString: assert(code.match(/testObj\s*?\[('|")[^'"]+\1\]/g).length > 1);
```
@@ -54,12 +59,12 @@ var drinkValue = testObj; // Change this line
</div>
### After Test
### After Tests
<div id='js-teardown'>
```js
console.info('after the test');
(function(a,b) { return "entreeValue = '" + a + "', drinkValue = '" + b + "'"; })(entreeValue,drinkValue);
```
</div>
@@ -70,6 +75,13 @@ console.info('after the test');
<section id='solution'>
```js
// solution required
var testObj = {
"an entree": "hamburger",
"my side": "veggies",
"the drink": "water"
};
var entreeValue = testObj["an entree"];
var drinkValue = testObj['the drink'];
```
</section>

View File

@@ -2,31 +2,48 @@
id: 56533eb9ac21ba0edf2244c7
title: Accessing Object Properties with Dot Notation
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/cGryJs8
forumTopicId: 16164
localeTitle: Доступ к объектным свойствам с нотами Dot
---
## Description
undefined
<section id='description'>
There are two ways to access the properties of an object: dot notation (<code>.</code>) and bracket notation (<code>[]</code>), similar to an array.
Dot notation is what you use when you know the name of the property you're trying to access ahead of time.
Here is a sample of using dot notation (<code>.</code>) to read an object's property:
```js
var myObj = {
prop1: "val1",
prop2: "val2"
};
var prop1val = myObj.prop1; // val1
var prop2val = myObj.prop2; // val2
```
</section>
## Instructions
<section id="instructions"> Прочитайте значения свойств <code>testObj</code> с использованием точечной нотации. Установите переменную <code>hatValue</code> равное свойству объекта <code>hat</code> и установить переменную <code>shirtValue</code> равной свойству объекта <code>shirt</code> . </section>
<section id='instructions'>
Прочитайте значения свойств <code>testObj</code> с использованием точечной нотации. Установите переменную <code>hatValue</code> равное свойству объекта <code>hat</code> и установить переменную <code>shirtValue</code> равной свойству объекта <code>shirt</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: ''
testString: 'assert(typeof hatValue === "string" , "<code>hatValue</code> should be a string");'
- text: Значение <code>hatValue</code> должно быть <code>&quot;ballcap&quot;</code>
testString: 'assert(hatValue === "ballcap" , "The value of <code>hatValue</code> should be <code>"ballcap"</code>");'
- text: <code>shirtValue</code> должна быть строкой
testString: 'assert(typeof shirtValue === "string" , "<code>shirtValue</code> should be a string");'
- text: Значение <code>shirtValue</code> должно быть <code>&quot;jersey&quot;</code>
testString: 'assert(shirtValue === "jersey" , "The value of <code>shirtValue</code> should be <code>"jersey"</code>");'
- text: Вы должны использовать точную нотацию дважды
testString: 'assert(code.match(/testObj\.\w+/g).length > 1, "You should use dot notation twice");'
- text: <code>hatValue</code> should be a string
testString: assert(typeof hatValue === 'string' );
- text: The value of <code>hatValue</code> should be <code>"ballcap"</code>
testString: assert(hatValue === 'ballcap' );
- text: <code>shirtValue</code> should be a string
testString: assert(typeof shirtValue === 'string' );
- text: The value of <code>shirtValue</code> should be <code>"jersey"</code>
testString: assert(shirtValue === 'jersey' );
- text: You should use dot notation twice
testString: assert(code.match(/testObj\.\w+/g).length > 1);
```
@@ -54,12 +71,12 @@ var shirtValue = testObj; // Change this line
</div>
### After Test
### After Tests
<div id='js-teardown'>
```js
console.info('after the test');
(function(a,b) { return "hatValue = '" + a + "', shirtValue = '" + b + "'"; })(hatValue,shirtValue);
```
</div>
@@ -70,6 +87,14 @@ console.info('after the test');
<section id='solution'>
```js
// solution required
var testObj = {
"hat": "ballcap",
"shirt": "jersey",
"shoes": "cleats"
};
var hatValue = testObj.hat;
var shirtValue = testObj.shirt;
```
</section>

View File

@@ -2,33 +2,38 @@
id: 56533eb9ac21ba0edf2244c9
title: Accessing Object Properties with Variables
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/cnQyKur
forumTopicId: 16165
localeTitle: Доступ к свойствам объектов с переменными
---
## Description
<section id="description"> Еще одно использование нотации к скобкам для объектов - это доступ к свойству, которое хранится как значение переменной. Это может быть очень полезно для итерации через свойства объекта или при доступе к поисковой таблице. Ниже приведен пример использования переменной для доступа к свойству: <blockquote> var dogs = { <br> Фидо: «Мутт», Охотник: «Доберман», Снупи: «Бигл», <br> }; <br> var myDog = &quot;Охотник&quot;; <br> var myBreed = dogs [myDog]; <br> console.log (myBreed); // &quot;Доберман&quot; </blockquote> Другим способом использования этой концепции является то, что имя свойства собирается динамически во время выполнения программы, а именно: <blockquote> var someObj = { <br> propName: &quot;Джон&quot; <br> }; <br> Функция propPrefix (str) { <br> var s = &quot;prop&quot;; <br> return s + str; <br> } <br> var someProp = propPrefix (&quot;Name&quot;); // someProp теперь содержит значение &#39;propName&#39; <br> console.log (someObj [someProp]); // &quot;Джон&quot; </blockquote> Обратите внимание, что мы <em>не</em> используем кавычки вокруг имени переменной при ее использовании для доступа к свойству, потому что мы используем <em>значение</em> переменной, а не <em>имя</em> . </section>
<section id='description'>
Еще одно использование нотации к скобкам для объектов - это доступ к свойству, которое хранится как значение переменной. Это может быть очень полезно для итерации через свойства объекта или при доступе к поисковой таблице. Ниже приведен пример использования переменной для доступа к свойству: <blockquote> var dogs = { <br> Фидо: «Мутт», Охотник: «Доберман», Снупи: «Бигл», <br> }; <br> var myDog = &quot;Охотник&quot;; <br> var myBreed = dogs [myDog]; <br> console.log (myBreed); // &quot;Доберман&quot; </blockquote> Другим способом использования этой концепции является то, что имя свойства собирается динамически во время выполнения программы, а именно: <blockquote> var someObj = { <br> propName: &quot;Джон&quot; <br> }; <br> Функция propPrefix (str) { <br> var s = &quot;prop&quot;; <br> return s + str; <br> } <br> var someProp = propPrefix (&quot;Name&quot;); // someProp теперь содержит значение &#39;propName&#39; <br> console.log (someObj [someProp]); // &quot;Джон&quot; </blockquote> Обратите внимание, что мы <em>не</em> используем кавычки вокруг имени переменной при ее использовании для доступа к свойству, потому что мы используем <em>значение</em> переменной, а не <em>имя</em> .
</section>
## Instructions
<section id="instructions"> Используйте переменную <code>playerNumber</code> для поиска игрока <code>16</code> в <code>testObj</code> с использованием нотации в <code>testObj</code> скобок. Затем назначьте это имя переменной <code>player</code> . </section>
<section id='instructions'>
Используйте переменную <code>playerNumber</code> для поиска игрока <code>16</code> в <code>testObj</code> с использованием нотации в <code>testObj</code> скобок. Затем назначьте это имя переменной <code>player</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>playerNumber</code> должен быть числом
testString: 'assert(typeof playerNumber === "number", "<code>playerNumber</code> should be a number");'
- text: Переменный <code>player</code> должен быть строкой
testString: 'assert(typeof player === "string", "The variable <code>player</code> should be a string");'
- text: 'Ценность <code>player</code> должна быть «Монтана»,'
testString: 'assert(player === "Montana", "The value of <code>player</code> should be "Montana"");'
- text: Для доступа к <code>testObj</code> вы должны использовать нотацию в виде <code>testObj</code>
testString: 'assert(/testObj\s*?\[.*?\]/.test(code),"You should use bracket notation to access <code>testObj</code>");'
- text: Вы не должны назначать значение <code>Montana</code> для переменной <code>player</code> напрямую.
testString: 'assert(!code.match(/player\s*=\s*"|\"\s*Montana\s*"|\"\s*;/gi),"You should not assign the value <code>Montana</code> to the variable <code>player</code> directly.");'
- text: Вы должны использовать переменную <code>playerNumber</code> в нотации вашего кронштейна
testString: 'assert(/testObj\s*?\[\s*playerNumber\s*\]/.test(code),"You should be using the variable <code>playerNumber</code> in your bracket notation");'
- text: <code>playerNumber</code> should be a number
testString: assert(typeof playerNumber === 'number');
- text: The variable <code>player</code> should be a string
testString: assert(typeof player === 'string');
- text: The value of <code>player</code> should be "Montana"
testString: assert(player === 'Montana');
- text: You should use bracket notation to access <code>testObj</code>
testString: assert(/testObj\s*?\[.*?\]/.test(code));
- text: You should not assign the value <code>Montana</code> to the variable <code>player</code> directly.
testString: assert(!code.match(/player\s*=\s*"|\'\s*Montana\s*"|\'\s*;/gi));
- text: You should be using the variable <code>playerNumber</code> in your bracket notation
testString: assert(/testObj\s*?\[\s*playerNumber\s*\]/.test(code));
```
@@ -56,12 +61,12 @@ var player = testObj; // Change this Line
</div>
### After Test
### After Tests
<div id='js-teardown'>
```js
console.info('after the test');
if(typeof player !== "undefined"){(function(v){return v;})(player);}
```
</div>
@@ -72,6 +77,13 @@ console.info('after the test');
<section id='solution'>
```js
// solution required
var testObj = {
12: "Namath",
16: "Montana",
19: "Unitas"
};
var playerNumber = 16;
var player = testObj[playerNumber];
```
</section>

View File

@@ -2,25 +2,30 @@
id: 56bbb991ad1ed5201cd392d2
title: Add New Properties to a JavaScript Object
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/cQe38UD
forumTopicId: 301169
localeTitle: Добавление новых свойств в объект JavaScript
---
## Description
<section id="description"> Вы можете добавлять новые свойства к существующим объектам JavaScript так же, как вы их модифицировали. Вот как мы добавим свойство <code>&quot;bark&quot;</code> в объект <code>ourDog</code> : <code>ourDog.bark = &quot;гав-гав&quot;;</code> или <code>ourDog[&quot;bark&quot;] = &quot;гав-гав&quot;;</code> Теперь, когда мы вызовем <code>ourDog.bark</code> , мы получим значение записанного свойства - <code>&quot;гав-гав&quot;</code>. </section>
<section id='description'>
Вы можете добавлять новые свойства к существующим объектам JavaScript так же, как вы их модифицировали. Вот как мы добавим свойство <code>&quot;bark&quot;</code> в объект <code>ourDog</code> : <code>ourDog.bark = &quot;гав-гав&quot;;</code> или <code>ourDog[&quot;bark&quot;] = &quot;гав-гав&quot;;</code> Теперь, когда мы вызовем <code>ourDog.bark</code> , мы получим значение записанного свойства - <code>&quot;гав-гав&quot;</code>.
</section>
## Instructions
<section id="instructions"> Добавьте свойство <code>&quot;bark&quot;</code> в объект <code>myDog</code> и присвойте этому свойству звук который издает собака, например "гав". Вы можете использовать точку или квадратные скобки для задания свойства объекта.</section>
<section id='instructions'>
Добавьте свойство <code>&quot;bark&quot;</code> в объект <code>myDog</code> и присвойте этому свойству звук который издает собака, например "гав". Вы можете использовать точку или квадратные скобки для задания свойства объекта.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: Добавьте свойство <code>&quot;bark&quot;</code> в <code>myDog</code> .
testString: 'assert(myDog.bark !== undefined, "Add the property <code>"bark"</code> to <code>myDog</code>.");'
- text: Не добавляйте свойство <code>&quot;bark&quot;</code> в раздел <code>// Setup</code>
testString: 'assert(!/bark[^\n]:/.test(code), "Do not add <code>"bark"</code> to the setup section");'
- text: Add the property <code>"bark"</code> to <code>myDog</code>.
testString: assert(myDog.bark !== undefined);
- text: Do not add <code>"bark"</code> to the setup section
testString: assert(!/bark[^\n]:/.test(code));
```
@@ -34,13 +39,13 @@ tests:
```js
// Example
var ourDog = {
"name": "Барбос",
"name": "Camper",
"legs": 4,
"tails": 1,
"friends": ["everything!"]
};
ourDog.bark = "гав-гав";
ourDog.bark = "bow-wow";
// Setup
var myDog = {
@@ -56,12 +61,12 @@ var myDog = {
</div>
### After Test
### After Tests
<div id='js-teardown'>
```js
(function(z){return z;})(myDog);
```
</div>
@@ -78,6 +83,7 @@ var myDog = {
"tails": 1,
"friends": ["freeCodeCamp Campers"]
};
myDog.bark = "Гав";
myDog.bark = "Woof Woof";
```
</section>

View File

@@ -2,25 +2,30 @@
id: cf1111c1c11feddfaeb3bdef
title: Add Two Numbers with JavaScript
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/cM2KBAG
forumTopicId: 16650
localeTitle: Сложить два числа с JavaScript
---
## Description
<section id="description"> <code>Number</code> - это тип данных в JavaScript, который представляет числовые данные. Теперь попробуем добавить два числа, используя JavaScript. JavaScript использует символ <code>+</code> в качестве операции сложения при размещении между двумя числами. <strong>пример</strong> <blockquote> myVar = 5 + 10; // присвоено 15 </blockquote></section>
<section id='description'>
<code>Number</code> - это тип данных в JavaScript, который представляет числовые данные. Теперь попробуем добавить два числа, используя JavaScript. JavaScript использует символ <code>+</code> в качестве операции сложения при размещении между двумя числами. <strong>пример</strong> <blockquote> myVar = 5 + 10; // присвоено 15 </blockquote>
</section>
## Instructions
<section id="instructions"> Измените <code>0</code> так, чтобы сумма равнялась <code>20</code> . </section>
<section id='instructions'>
Измените <code>0</code> так, чтобы сумма равнялась <code>20</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>sum</code> должна равняться <code>20</code>
testString: 'assert(sum === 20, "<code>sum</code> should equal <code>20</code>");'
- text: Используйте оператор <code>+</code>
testString: 'assert(/\+/.test(code), "Use the <code>+</code> operator");'
- text: <code>sum</code> should equal <code>20</code>
testString: assert(sum === 20);
- text: Use the <code>+</code> operator
testString: assert(/\+/.test(code));
```
@@ -38,12 +43,12 @@ var sum = 10 + 0;
</div>
### After Test
### After Tests
<div id='js-teardown'>
```js
console.info('after the test');
(function(z){return 'sum = '+z;})(sum);
```
</div>
@@ -54,6 +59,7 @@ console.info('after the test');
<section id='solution'>
```js
// solution required
var sum = 10 + 10;
```
</section>

View File

@@ -2,37 +2,42 @@
id: 56533eb9ac21ba0edf2244de
title: Adding a Default Option in Switch Statements
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/c3JvVfg
forumTopicId: 16653
localeTitle: Добавление опции по умолчанию в операторы switch
---
## Description
<section id="description"> В операторе <code>switch</code> вы не сможете указывать все возможные значения в качестве операторов <code>case</code> . Вместо этого вы можете добавить оператор по <code>default</code> который будет выполняться, если не найдено совпадающих операторов <code>case</code> . Думайте об этом как финальном <code>else</code> утверждении в качестве , <code>if/else</code> цепи. В последнем случае должен использоваться оператор по <code>default</code> . <blockquote> switch (num) { <br> значение case1: <br> statement1; <br> ломать; <br> значение case2: <br> оператор2; <br> ломать; <br> ... <br> по умолчанию: <br> defaultStatement; <br> ломать; <br> } </blockquote></section>
<section id='description'>
В операторе <code>switch</code> вы не сможете указывать все возможные значения в качестве операторов <code>case</code> . Вместо этого вы можете добавить оператор по <code>default</code> который будет выполняться, если не найдено совпадающих операторов <code>case</code> . Думайте об этом как финальном <code>else</code> утверждении в качестве , <code>if/else</code> цепи. В последнем случае должен использоваться оператор по <code>default</code> . <blockquote> switch (num) { <br> значение case1: <br> statement1; <br> ломать; <br> значение case2: <br> оператор2; <br> ломать; <br> ... <br> по умолчанию: <br> defaultStatement; <br> ломать; <br> } </blockquote>
</section>
## Instructions
<section id="instructions"> Напишите оператор switch, чтобы задать <code>answer</code> для следующих условий: <br> <code>&quot;a&quot;</code> - &quot;яблоко&quot; <br> <code>&quot;b&quot;</code> - &quot;птица&quot; <br> <code>&quot;c&quot;</code> - &quot;cat&quot; <br> <code>default</code> - &quot;stuff&quot; </section>
<section id='instructions'>
Напишите оператор switch, чтобы задать <code>answer</code> для следующих условий: <br> <code>&quot;a&quot;</code> - &quot;яблоко&quot; <br> <code>&quot;b&quot;</code> - &quot;птица&quot; <br> <code>&quot;c&quot;</code> - &quot;cat&quot; <br> <code>default</code> - &quot;stuff&quot;
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>switchOfStuff(&quot;a&quot;)</code> должен иметь значение &quot;apple&quot;
testString: 'assert(switchOfStuff("a") === "apple", "<code>switchOfStuff("a")</code> should have a value of "apple"");'
- text: <code>switchOfStuff(&quot;b&quot;)</code> должен иметь значение &quot;bird&quot;
testString: 'assert(switchOfStuff("b") === "bird", "<code>switchOfStuff("b")</code> should have a value of "bird"");'
- text: <code>switchOfStuff(&quot;c&quot;)</code> должен иметь значение &quot;cat&quot;
testString: 'assert(switchOfStuff("c") === "cat", "<code>switchOfStuff("c")</code> should have a value of "cat"");'
- text: <code>switchOfStuff(&quot;d&quot;)</code> должен иметь значение &quot;stuff&quot;
testString: 'assert(switchOfStuff("d") === "stuff", "<code>switchOfStuff("d")</code> should have a value of "stuff"");'
- text: <code>switchOfStuff(4)</code> должен иметь значение &quot;stuff&quot;
testString: 'assert(switchOfStuff(4) === "stuff", "<code>switchOfStuff(4)</code> should have a value of "stuff"");'
- text: Вы не должны использовать никаких утверждений <code>if</code> или <code>else</code>
testString: 'assert(!/else/g.test(code) || !/if/g.test(code), "You should not use any <code>if</code> or <code>else</code> statements");'
- text: Вы должны использовать инструкцию по <code>default</code>
testString: 'assert(switchOfStuff("string-to-trigger-default-case") === "stuff", "You should use a <code>default</code> statement");'
- text: У вас должно быть как минимум 3 заявления о <code>break</code>
testString: 'assert(code.match(/break/g).length > 2, "You should have at least 3 <code>break</code> statements");'
- text: <code>switchOfStuff("a")</code> should have a value of "apple"
testString: assert(switchOfStuff("a") === "apple");
- text: <code>switchOfStuff("b")</code> should have a value of "bird"
testString: assert(switchOfStuff("b") === "bird");
- text: <code>switchOfStuff("c")</code> should have a value of "cat"
testString: assert(switchOfStuff("c") === "cat");
- text: <code>switchOfStuff("d")</code> should have a value of "stuff"
testString: assert(switchOfStuff("d") === "stuff");
- text: <code>switchOfStuff(4)</code> should have a value of "stuff"
testString: assert(switchOfStuff(4) === "stuff");
- text: You should not use any <code>if</code> or <code>else</code> statements
testString: assert(!/else/g.test(code) || !/if/g.test(code));
- text: You should use a <code>default</code> statement
testString: assert(switchOfStuff("string-to-trigger-default-case") === "stuff");
- text: You should have at least 3 <code>break</code> statements
testString: assert(code.match(/break/g).length > 2);
```
@@ -61,14 +66,30 @@ switchOfStuff(1);
</div>
</section>
## Solution
<section id='solution'>
```js
// solution required
function switchOfStuff(val) {
var answer = "";
switch(val) {
case "a":
answer = "apple";
break;
case "b":
answer = "bird";
break;
case "c":
answer = "cat";
break;
default:
answer = "stuff";
}
return answer;
}
```
</section>

View File

@@ -2,25 +2,30 @@
id: 56533eb9ac21ba0edf2244ed
title: Appending Variables to Strings
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/cbQmZfa
forumTopicId: 16656
localeTitle: Добавление переменных в строки
---
## Description
<section id="description"> Так же, как мы можем построить строку из нескольких строк из строковых <dfn>литералов</dfn> , мы также можем добавить переменные в строку, используя оператор equals ( <code>+=</code> ). </section>
<section id='description'>
Так же, как мы можем построить строку из нескольких строк из строковых <dfn>литералов</dfn> , мы также можем добавить переменные в строку, используя оператор equals ( <code>+=</code> ).
</section>
## Instructions
<section id="instructions"> Установите <code>someAdjective</code> и добавьте его в <code>myStr</code> используя оператор <code>+=</code> . </section>
<section id='instructions'>
Установите <code>someAdjective</code> и добавьте его в <code>myStr</code> используя оператор <code>+=</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>someAdjective</code> должен быть установлен в строку длиной не менее 3 символов
testString: 'assert(typeof someAdjective !== "undefined" && someAdjective.length > 2, "<code>someAdjective</code> should be set to a string at least 3 characters long");'
- text: Добавить <code>someAdjective</code> в <code>myStr</code> используя оператор <code>+=</code>
testString: 'assert(code.match(/myStr\s*\+=\s*someAdjective\s*/).length > 0, "Append <code>someAdjective</code> to <code>myStr</code> using the <code>+=</code> operator");'
- text: <code>someAdjective</code> should be set to a string at least 3 characters long
testString: assert(typeof someAdjective !== 'undefined' && someAdjective.length > 2);
- text: Append <code>someAdjective</code> to <code>myStr</code> using the <code>+=</code> operator
testString: assert(code.match(/myStr\s*\+=\s*someAdjective\s*/).length > 0);
```
@@ -46,12 +51,25 @@ var myStr = "Learning to code is ";
</div>
### After Test
### After Tests
<div id='js-teardown'>
```js
console.info('after the test');
(function(){
var output = [];
if(typeof someAdjective === 'string') {
output.push('someAdjective = "' + someAdjective + '"');
} else {
output.push('someAdjective is not a string');
}
if(typeof myStr === 'string') {
output.push('myStr = "' + myStr + '"');
} else {
output.push('myStr is not a string');
}
return output.join('\n');
})();
```
</div>
@@ -62,6 +80,13 @@ console.info('after the test');
<section id='solution'>
```js
// solution required
var anAdjective = "awesome!";
var ourStr = "freeCodeCamp is ";
ourStr += anAdjective;
var someAdjective = "neat";
var myStr = "Learning to code is ";
myStr += someAdjective;
```
</section>

View File

@@ -2,25 +2,30 @@
id: 56533eb9ac21ba0edf2244c3
title: Assignment with a Returned Value
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/ce2pEtB
forumTopicId: 16658
localeTitle: Назначение с возвращенной стоимостью
---
## Description
<section id="description"> Если вы вспомните из нашего обсуждения « <a href="learn/javascript-algorithms-and-data-structures/basic-javascript/storing-values-with-the-assignment-operator" target="_blank">Сохранение значений с помощью оператора назначения»</a> , все, что находится справа от знака равенства, будет разрешено до присвоения значения. Это означает, что мы можем взять возвращаемое значение функции и присвоить ее переменной. Предположим, что мы предварительно определили <code>sum</code> функций, которая объединяет два числа, а затем: <code>ourSum = sum(5, 12);</code> вызовет функцию <code>sum</code> , которая возвращает значение <code>17</code> и присваивает ее переменной <code>ourSum</code> . </section>
<section id='description'>
Если вы вспомните из нашего обсуждения « <a href="learn/javascript-algorithms-and-data-structures/basic-javascript/storing-values-with-the-assignment-operator" target="_blank">Сохранение значений с помощью оператора назначения»</a> , все, что находится справа от знака равенства, будет разрешено до присвоения значения. Это означает, что мы можем взять возвращаемое значение функции и присвоить ее переменной. Предположим, что мы предварительно определили <code>sum</code> функций, которая объединяет два числа, а затем: <code>ourSum = sum(5, 12);</code> вызовет функцию <code>sum</code> , которая возвращает значение <code>17</code> и присваивает ее переменной <code>ourSum</code> .
</section>
## Instructions
<section id="instructions"> Вызовите функцию <code>processArg</code> с аргументом <code>7</code> и назначьте его возвращаемое значение <code>processed</code> переменной. </section>
<section id='instructions'>
Вызовите функцию <code>processArg</code> с аргументом <code>7</code> и назначьте его возвращаемое значение <code>processed</code> переменной.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>processed</code> должна иметь значение <code>2</code>
testString: 'assert(processed === 2, "<code>processed</code> should have a value of <code>2</code>");'
- text: Вы должны назначить <code>processArg</code> для <code>processed</code>
testString: 'assert(/processed\s*=\s*processArg\(\s*7\s*\)\s*;/.test(code), "You should assign <code>processArg</code> to <code>processed</code>");'
- text: <code>processed</code> should have a value of <code>2</code>
testString: assert(processed === 2);
- text: You should assign <code>processArg</code> to <code>processed</code>
testString: assert(/processed\s*=\s*processArg\(\s*7\s*\)/.test(code));
```
@@ -54,12 +59,12 @@ function processArg(num) {
</div>
### After Test
### After Tests
<div id='js-teardown'>
```js
console.info('after the test');
(function(){return "processed = " + processed})();
```
</div>
@@ -70,6 +75,13 @@ console.info('after the test');
<section id='solution'>
```js
// solution required
var processed = 0;
function processArg(num) {
return (num + 3) / 5;
}
processed = processArg(7);
```
</section>

View File

@@ -2,31 +2,36 @@
id: 56bbb991ad1ed5201cd392d0
title: Build JavaScript Objects
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/cWGkbtd
forumTopicId: 16769
localeTitle: Создание объектов JavaScript
---
## Description
<section id="description"> Возможно, вы слышали термин <code>object</code> раньше. Объекты похожи на <code>arrays</code> , за исключением того, что вместо использования индексов для доступа и изменения их данных вы получаете доступ к данным в объектах через так называемые <code>properties</code> . Объекты полезны для хранения данных структурированным способом и могут представлять объекты реального мира, такие как кошка. Вот пример объекта cat: <blockquote> var cat = { <br> «имя»: «Усы», <br> «ноги»: 4, <br> «хвосты»: 1, <br> «враги»: [«Вода», «Собаки»] <br> }; </blockquote> В этом примере все свойства сохраняются как строки, такие как <code>&quot;name&quot;</code> , <code>&quot;legs&quot;</code> и <code>&quot;tails&quot;</code> . Однако вы также можете использовать числа как свойства. Вы даже можете опустить кавычки для свойств строки с одним словом, а именно: <blockquote> var anotherObject = { <br> сделать: «Форд», <br> 5: «пять», <br> «модель»: «фокус» <br> }; </blockquote> Однако, если ваш объект имеет какие-либо свойства, отличные от строки, JavaScript автоматически приведет их в виде строк. </section>
<section id='description'>
Возможно, вы слышали термин <code>object</code> раньше. Объекты похожи на <code>arrays</code> , за исключением того, что вместо использования индексов для доступа и изменения их данных вы получаете доступ к данным в объектах через так называемые <code>properties</code> . Объекты полезны для хранения данных структурированным способом и могут представлять объекты реального мира, такие как кошка. Вот пример объекта cat: <blockquote> var cat = { <br> «имя»: «Усы», <br> «ноги»: 4, <br> «хвосты»: 1, <br> «враги»: [«Вода», «Собаки»] <br> }; </blockquote> В этом примере все свойства сохраняются как строки, такие как <code>&quot;name&quot;</code> , <code>&quot;legs&quot;</code> и <code>&quot;tails&quot;</code> . Однако вы также можете использовать числа как свойства. Вы даже можете опустить кавычки для свойств строки с одним словом, а именно: <blockquote> var anotherObject = { <br> сделать: «Форд», <br> 5: «пять», <br> «модель»: «фокус» <br> }; </blockquote> Однако, если ваш объект имеет какие-либо свойства, отличные от строки, JavaScript автоматически приведет их в виде строк.
</section>
## Instructions
<section id="instructions"> Создайте объект, представляющий собаку под названием <code>myDog</code> которая содержит свойства <code>&quot;name&quot;</code> (строка), <code>&quot;legs&quot;</code> , <code>&quot;tails&quot;</code> и <code>&quot;friends&quot;</code> . Вы можете установить эти свойства объекта для любых значений, которые вы хотите, поскольку <code>&quot;name&quot;</code> - это строка, <code>&quot;legs&quot;</code> и <code>&quot;tails&quot;</code> - это числа, а <code>&quot;friends&quot;</code> - это массив. </section>
<section id='instructions'>
Создайте объект, представляющий собаку под названием <code>myDog</code> которая содержит свойства <code>&quot;name&quot;</code> (строка), <code>&quot;legs&quot;</code> , <code>&quot;tails&quot;</code> и <code>&quot;friends&quot;</code> . Вы можете установить эти свойства объекта для любых значений, которые вы хотите, поскольку <code>&quot;name&quot;</code> - это строка, <code>&quot;legs&quot;</code> и <code>&quot;tails&quot;</code> - это числа, а <code>&quot;friends&quot;</code> - это массив.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: '<code>myDog</code> должен содержать <code>name</code> свойства, и он должен быть <code>string</code> .'
testString: 'assert((function(z){if(z.hasOwnProperty("name") && z.name !== undefined && typeof z.name === "string"){return true;}else{return false;}})(myDog), "<code>myDog</code> should contain the property <code>name</code> and it should be a <code>string</code>.");'
- text: '<code>myDog</code> должен содержать собственности <code>legs</code> , и это должно быть <code>number</code> .'
testString: 'assert((function(z){if(z.hasOwnProperty("legs") && z.legs !== undefined && typeof z.legs === "number"){return true;}else{return false;}})(myDog), "<code>myDog</code> should contain the property <code>legs</code> and it should be a <code>number</code>.");'
- text: '<code>myDog</code> должен содержать <code>tails</code> свойств, и это должно быть <code>number</code> .'
testString: 'assert((function(z){if(z.hasOwnProperty("tails") && z.tails !== undefined && typeof z.tails === "number"){return true;}else{return false;}})(myDog), "<code>myDog</code> should contain the property <code>tails</code> and it should be a <code>number</code>.");'
- text: '<code>myDog</code> должен содержать <code>friends</code> свойства, и он должен быть <code>array</code> .'
testString: 'assert((function(z){if(z.hasOwnProperty("friends") && z.friends !== undefined && Array.isArray(z.friends)){return true;}else{return false;}})(myDog), "<code>myDog</code> should contain the property <code>friends</code> and it should be an <code>array</code>.");'
- text: <code>myDog</code> должен содержать только все свойства.
testString: 'assert((function(z){return Object.keys(z).length === 4;})(myDog), "<code>myDog</code> should only contain all the given properties.");'
- text: <code>myDog</code> should contain the property <code>name</code> and it should be a <code>string</code>.
testString: assert((function(z){if(z.hasOwnProperty("name") && z.name !== undefined && typeof z.name === "string"){return true;}else{return false;}})(myDog));
- text: <code>myDog</code> should contain the property <code>legs</code> and it should be a <code>number</code>.
testString: assert((function(z){if(z.hasOwnProperty("legs") && z.legs !== undefined && typeof z.legs === "number"){return true;}else{return false;}})(myDog));
- text: <code>myDog</code> should contain the property <code>tails</code> and it should be a <code>number</code>.
testString: assert((function(z){if(z.hasOwnProperty("tails") && z.tails !== undefined && typeof z.tails === "number"){return true;}else{return false;}})(myDog));
- text: <code>myDog</code> should contain the property <code>friends</code> and it should be an <code>array</code>.
testString: assert((function(z){if(z.hasOwnProperty("friends") && z.friends !== undefined && Array.isArray(z.friends)){return true;}else{return false;}})(myDog));
- text: <code>myDog</code> should only contain all the given properties.
testString: assert((function(z){return Object.keys(z).length === 4;})(myDog));
```
@@ -59,12 +64,12 @@ var myDog = {
</div>
### After Test
### After Tests
<div id='js-teardown'>
```js
console.info('after the test');
(function(z){return z;})(myDog);
```
</div>
@@ -75,6 +80,12 @@ console.info('after the test');
<section id='solution'>
```js
// solution required
var myDog = {
"name": "Camper",
"legs": 4,
"tails": 1,
"friends": ["everything!"]
};
```
</section>

View File

@@ -2,47 +2,52 @@
id: 56533eb9ac21ba0edf2244dc
title: Chaining If Else Statements
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/caeJgsw
forumTopicId: 16772
localeTitle: Связывание с другими сообщениями
---
## Description
<section id="description"> <code>if/else</code> утверждения могут быть объединены вместе для сложной логики. Вот <dfn>псевдокод</dfn> операторов с несколькими цепями <code>if</code> / <code>else if</code> : <blockquote> если ( <em>условие 1</em> ) { <br> <em>statement1</em> <br> } else if ( <em>условие2</em> ) { <br> <em>оператор2</em> <br> } else if ( <em>условие 3</em> ) { <br> <em>оператор3</em> <br> , , , <br> } else { <br> <em>statementN</em> <br> } </blockquote></section>
<section id='description'>
<code>if/else</code> утверждения могут быть объединены вместе для сложной логики. Вот <dfn>псевдокод</dfn> операторов с несколькими цепями <code>if</code> / <code>else if</code> : <blockquote> если ( <em>условие 1</em> ) { <br> <em>statement1</em> <br> } else if ( <em>условие2</em> ) { <br> <em>оператор2</em> <br> } else if ( <em>условие 3</em> ) { <br> <em>оператор3</em> <br> , , , <br> } else { <br> <em>statementN</em> <br> } </blockquote>
</section>
## Instructions
<section id="instructions"> Напишите прикованные <code>if</code> / <code>else if</code> выражения для выполнения следующих условий: <code>num &lt; 5</code> - return &quot;Tiny&quot; <br> <code>num &lt; 10</code> - возврат &quot;Small&quot; <br> <code>num &lt; 15</code> - возврат &quot;Средний&quot; <br> <code>num &lt; 20</code> - возврат &quot;Большой&quot; <br> <code>num &gt;= 20</code> - возврат &quot;Огромный&quot; </section>
<section id='instructions'>
Напишите прикованные <code>if</code> / <code>else if</code> выражения для выполнения следующих условий: <code>num &lt; 5</code> - return &quot;Tiny&quot; <br> <code>num &lt; 10</code> - возврат &quot;Small&quot; <br> <code>num &lt; 15</code> - возврат &quot;Средний&quot; <br> <code>num &lt; 20</code> - возврат &quot;Большой&quot; <br> <code>num &gt;= 20</code> - возврат &quot;Огромный&quot;
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: У вас должно быть как минимум четыре оператора <code>else</code>
testString: 'assert(code.match(/else/g).length > 3, "You should have at least four <code>else</code> statements");'
- text: У вас должно быть как минимум четыре оператора <code>if</code>
testString: 'assert(code.match(/if/g).length > 3, "You should have at least four <code>if</code> statements");'
- text: У вас должно быть хотя бы одно заявление о <code>return</code>
testString: 'assert(code.match(/return/g).length >= 1, "You should have at least one <code>return</code> statement");'
- text: <code>testSize(0)</code> должен возвращать &quot;Tiny&quot;
testString: 'assert(testSize(0) === "Tiny", "<code>testSize(0)</code> should return "Tiny"");'
- text: <code>testSize(4)</code> должен вернуть «Tiny»
testString: 'assert(testSize(4) === "Tiny", "<code>testSize(4)</code> should return "Tiny"");'
- text: <code>testSize(5)</code> должен возвращать &quot;Small&quot;
testString: 'assert(testSize(5) === "Small", "<code>testSize(5)</code> should return "Small"");'
- text: <code>testSize(8)</code> должен вернуть «Small»
testString: 'assert(testSize(8) === "Small", "<code>testSize(8)</code> should return "Small"");'
- text: '<code>testSize(10)</code> должен возвращать «Средний»,'
testString: 'assert(testSize(10) === "Medium", "<code>testSize(10)</code> should return "Medium"");'
- text: <code>testSize(14)</code> должен возвращать «Средний»
testString: 'assert(testSize(14) === "Medium", "<code>testSize(14)</code> should return "Medium"");'
- text: <code>testSize(15)</code> должен возвращать &quot;Large&quot;
testString: 'assert(testSize(15) === "Large", "<code>testSize(15)</code> should return "Large"");'
- text: <code>testSize(17)</code> должен вернуть &quot;Large&quot;
testString: 'assert(testSize(17) === "Large", "<code>testSize(17)</code> should return "Large"");'
- text: <code>testSize(20)</code> должен вернуть «Огромный»
testString: 'assert(testSize(20) === "Huge", "<code>testSize(20)</code> should return "Huge"");'
- text: <code>testSize(25)</code> должен вернуть «Огромный»
testString: 'assert(testSize(25) === "Huge", "<code>testSize(25)</code> should return "Huge"");'
- text: You should have at least four <code>else</code> statements
testString: assert(code.match(/else/g).length > 3);
- text: You should have at least four <code>if</code> statements
testString: assert(code.match(/if/g).length > 3);
- text: You should have at least one <code>return</code> statement
testString: assert(code.match(/return/g).length >= 1);
- text: <code>testSize(0)</code> should return "Tiny"
testString: assert(testSize(0) === "Tiny");
- text: <code>testSize(4)</code> should return "Tiny"
testString: assert(testSize(4) === "Tiny");
- text: <code>testSize(5)</code> should return "Small"
testString: assert(testSize(5) === "Small");
- text: <code>testSize(8)</code> should return "Small"
testString: assert(testSize(8) === "Small");
- text: <code>testSize(10)</code> should return "Medium"
testString: assert(testSize(10) === "Medium");
- text: <code>testSize(14)</code> should return "Medium"
testString: assert(testSize(14) === "Medium");
- text: <code>testSize(15)</code> should return "Large"
testString: assert(testSize(15) === "Large");
- text: <code>testSize(17)</code> should return "Large"
testString: assert(testSize(17) === "Large");
- text: <code>testSize(20)</code> should return "Huge"
testString: assert(testSize(20) === "Huge");
- text: <code>testSize(25)</code> should return "Huge"
testString: assert(testSize(25) === "Huge");
```
@@ -69,14 +74,25 @@ testSize(7);
</div>
</section>
## Solution
<section id='solution'>
```js
// solution required
function testSize(num) {
if (num < 5) {
return "Tiny";
} else if (num < 10) {
return "Small";
} else if (num < 15) {
return "Medium";
} else if (num < 20) {
return "Large";
} else {
return "Huge";
}
}
```
</section>

View File

@@ -2,31 +2,36 @@
id: bd7123c9c441eddfaeb4bdef
title: Comment Your JavaScript Code
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/c7ynnTp
forumTopicId: 16783
localeTitle: Комментарии в коде
---
## Description
<section id="description"> Комментарии представляют собой строки кода, которые JavaScript игнорирует. Использование комментариев является отличным способом оставить заметки себе или другим, кому придется разбираться в работе кода.
<section id='description'>
Комментарии представляют собой строки кода, которые JavaScript игнорирует. Использование комментариев является отличным способом оставить заметки себе или другим, кому придется разбираться в работе кода.
Комментарии в JavaScript бывают двух видов :
Два идущих подряд слэша <code>//</code> являются указанием игнорировать весь идущий за ними текст на этой строке:
<blockquote> // Это комментарий в строке. </blockquote>
Также можно сделать многострочный комментарий: он должен начинаться с <code>/*</code> и заканчиваться на <code>*/</code> :
<blockquote> /* Это <br> многострочный комментарий * / </blockquote>
<strong>Лучшая практика</strong> <br> В процессе написания кода имеет смысл регулярно добавлять комментарии, в которых будет описываться функциональность различных частей кода. Хороший комментарий может помочь разобраться в сути вашего кода - как другим людям, так <em>и</em> вам в будущем. </section>
<strong>Лучшая практика</strong> <br> В процессе написания кода имеет смысл регулярно добавлять комментарии, в которых будет описываться функциональность различных частей кода. Хороший комментарий может помочь разобраться в сути вашего кода - как другим людям, так <em>и</em> вам в будущем.
</section>
## Instructions
<section id="instructions"> Попробуйте создать один из комментариев каждого вида. </section>
<section id='instructions'>
Попробуйте создать один из комментариев каждого вида.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: 'Создайте однострочный комментарий <code>//</code> , содержащий не менее пяти букв.'
testString: 'assert(code.match(/(\/\/)...../g), "Create a <code>//</code> style comment that contains at least five letters.");'
- text: 'Создайте многострочный комментарий <code>/* */</code> , содержащий не менее пяти букв.'
testString: 'assert(code.match(/(\/\*)([^\/]{5,})(?=\*\/)/gm), "Create a <code>/* */</code> style comment that contains at least five letters.");'
- text: Create a <code>//</code> style comment that contains at least five letters.
testString: assert(code.match(/(\/\/)...../g));
- text: Create a <code>/* */</code> style comment that contains at least five letters.
testString: assert(code.match(/(\/\*)([^\/]{5,})(?=\*\/)/gm));
```
@@ -43,17 +48,14 @@ tests:
</div>
</section>
## Solution
<section id='solution'>
```js
// Однострочный комментарий
/*
Многострочный комментарий
*/
// Fake Comment
/* Another Comment */
```
</section>

View File

@@ -2,29 +2,34 @@
id: 56533eb9ac21ba0edf2244d0
title: Comparison with the Equality Operator
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/cKyVMAL
forumTopicId: 16784
localeTitle: Сравнение с оператором равенства
---
## Description
<section id="description"> В JavaScript есть много <dfn>операторов сравнения</dfn> . Все эти операторы возвращают логическое значение <code>true</code> или <code>false</code> . Основным оператором является оператор равенства <code>==</code> . Оператор равенства сравнивает два значения и возвращает <code>true</code> если они эквивалентны или <code>false</code> если они не являются. Обратите внимание, что равенство отличается от присваивания ( <code>=</code> ), которое присваивает значение справа от оператора переменной в левой части. <blockquote> функция равенстваTest (myVal) { <br> if (myVal == 10) { <br> return «Equal»; <br> } <br> возвращение «Не равно»; <br> } </blockquote> Если <code>myVal</code> равно <code>10</code> , оператор равенства возвращает <code>true</code> , поэтому код в фигурных скобках будет выполняться, и функция вернет <code>&quot;Equal&quot;</code> . В противном случае функция вернет <code>&quot;Not Equal&quot;</code> . Чтобы JavaScript мог сравнивать два разных <code>data types</code> (например, <code>numbers</code> и <code>strings</code> ), он должен преобразовывать один тип в другой. Это называется «Типовое принуждение». Однако, как только это произойдет, он может сравнить термины следующим образом: <blockquote> 1 == 1 // true <br> 1 == 2 // false <br> 1 == &#39;1&#39; // true <br> &quot;3&quot; == 3 // true </blockquote></section>
<section id='description'>
В JavaScript есть много <dfn>операторов сравнения</dfn> . Все эти операторы возвращают логическое значение <code>true</code> или <code>false</code> . Основным оператором является оператор равенства <code>==</code> . Оператор равенства сравнивает два значения и возвращает <code>true</code> если они эквивалентны или <code>false</code> если они не являются. Обратите внимание, что равенство отличается от присваивания ( <code>=</code> ), которое присваивает значение справа от оператора переменной в левой части. <blockquote> функция равенстваTest (myVal) { <br> if (myVal == 10) { <br> return «Equal»; <br> } <br> возвращение «Не равно»; <br> } </blockquote> Если <code>myVal</code> равно <code>10</code> , оператор равенства возвращает <code>true</code> , поэтому код в фигурных скобках будет выполняться, и функция вернет <code>&quot;Equal&quot;</code> . В противном случае функция вернет <code>&quot;Not Equal&quot;</code> . Чтобы JavaScript мог сравнивать два разных <code>data types</code> (например, <code>numbers</code> и <code>strings</code> ), он должен преобразовывать один тип в другой. Это называется «Типовое принуждение». Однако, как только это произойдет, он может сравнить термины следующим образом: <blockquote> 1 == 1 // true <br> 1 == 2 // false <br> 1 == &#39;1&#39; // true <br> &quot;3&quot; == 3 // true </blockquote>
</section>
## Instructions
<section id="instructions"> Добавьте <code>equality operator</code> в указанную строку, чтобы функция вернула «Равно», когда <code>val</code> эквивалентно <code>12</code> </section>
<section id='instructions'>
Добавьте <code>equality operator</code> в указанную строку, чтобы функция вернула «Равно», когда <code>val</code> эквивалентно <code>12</code>
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>testEqual(10)</code> должен вернуть «Не <code>testEqual(10)</code> »
testString: 'assert(testEqual(10) === "Not Equal", "<code>testEqual(10)</code> should return "Not Equal"");'
- text: <code>testEqual(12)</code> должен возвращать &quot;Equal&quot;
testString: 'assert(testEqual(12) === "Equal", "<code>testEqual(12)</code> should return "Equal"");'
- text: <code>testEqual(&quot;12&quot;)</code> должен возвращать &quot;Equal&quot;
testString: 'assert(testEqual("12") === "Equal", "<code>testEqual("12")</code> should return "Equal"");'
- text: Вы должны использовать оператор <code>==</code>
testString: 'assert(code.match(/==/g) && !code.match(/===/g), "You should use the <code>==</code> operator");'
- text: <code>testEqual(10)</code> should return "Not Equal"
testString: assert(testEqual(10) === "Not Equal");
- text: <code>testEqual(12)</code> should return "Equal"
testString: assert(testEqual(12) === "Equal");
- text: <code>testEqual("12")</code> should return "Equal"
testString: assert(testEqual("12") === "Equal");
- text: You should use the <code>==</code> operator
testString: assert(code.match(/==/g) && !code.match(/===/g));
```
@@ -51,14 +56,18 @@ testEqual(10);
</div>
</section>
## Solution
<section id='solution'>
```js
// solution required
function testEqual(val) {
if (val == 12) {
return "Equal";
}
return "Not Equal";
}
```
</section>

View File

@@ -2,37 +2,42 @@
id: 56533eb9ac21ba0edf2244d4
title: Comparison with the Greater Than Operator
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/cp6GbH4
forumTopicId: 16786
localeTitle: Сравнение с более крупным оператором
---
## Description
<section id="description"> Чем больше оператор ( <code>&gt;</code> ), сравнивает значения двух чисел. Если число слева больше числа справа, оно возвращает <code>true</code> . В противном случае возвращается <code>false</code> . Как и оператор равенства, большее, чем оператор, преобразует типы данных при сравнении. <strong>Примеры</strong> <blockquote> 5&gt; 3 // true <br> 7&gt; &#39;3&#39; // true <br> 2&gt; 3 // false <br> &#39;1&#39;&gt; 9 // false </blockquote></section>
<section id='description'>
Чем больше оператор ( <code>&gt;</code> ), сравнивает значения двух чисел. Если число слева больше числа справа, оно возвращает <code>true</code> . В противном случае возвращается <code>false</code> . Как и оператор равенства, большее, чем оператор, преобразует типы данных при сравнении. <strong>Примеры</strong> <blockquote> 5&gt; 3 // true <br> 7&gt; &#39;3&#39; // true <br> 2&gt; 3 // false <br> &#39;1&#39;&gt; 9 // false </blockquote>
</section>
## Instructions
<section id="instructions"> Добавьте к указанным линиям оператор <code>greater than</code> операторы return. </section>
<section id='instructions'>
Добавьте к указанным линиям оператор <code>greater than</code> операторы return.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: '<code>testGreaterThan(0)</code> должен возвращать «10 или меньше»,'
testString: 'assert(testGreaterThan(0) === "10 or Under", "<code>testGreaterThan(0)</code> should return "10 or Under"");'
- text: '<code>testGreaterThan(10)</code> должен возвращать «10 или меньше»,'
testString: 'assert(testGreaterThan(10) === "10 or Under", "<code>testGreaterThan(10)</code> should return "10 or Under"");'
- text: '<code>testGreaterThan(11)</code> должен вернуть «Более 10»,'
testString: 'assert(testGreaterThan(11) === "Over 10", "<code>testGreaterThan(11)</code> should return "Over 10"");'
- text: '<code>testGreaterThan(99)</code> должен вернуть «Более 10»,'
testString: 'assert(testGreaterThan(99) === "Over 10", "<code>testGreaterThan(99)</code> should return "Over 10"");'
- text: '<code>testGreaterThan(100)</code> должен вернуть «Более 10»,'
testString: 'assert(testGreaterThan(100) === "Over 10", "<code>testGreaterThan(100)</code> should return "Over 10"");'
- text: '<code>testGreaterThan(101)</code> должен вернуть «Более 100»,'
testString: 'assert(testGreaterThan(101) === "Over 100", "<code>testGreaterThan(101)</code> should return "Over 100"");'
- text: '<code>testGreaterThan(150)</code> должен вернуть «Более 100»,'
testString: 'assert(testGreaterThan(150) === "Over 100", "<code>testGreaterThan(150)</code> should return "Over 100"");'
- text: Вы должны использовать оператор <code>&gt;</code> как минимум дважды
testString: 'assert(code.match(/val\s*>\s*("|")*\d+("|")*/g).length > 1, "You should use the <code>&gt;</code> operator at least twice");'
- text: <code>testGreaterThan(0)</code> should return "10 or Under"
testString: assert(testGreaterThan(0) === "10 or Under");
- text: <code>testGreaterThan(10)</code> should return "10 or Under"
testString: assert(testGreaterThan(10) === "10 or Under");
- text: <code>testGreaterThan(11)</code> should return "Over 10"
testString: assert(testGreaterThan(11) === "Over 10");
- text: <code>testGreaterThan(99)</code> should return "Over 10"
testString: assert(testGreaterThan(99) === "Over 10");
- text: <code>testGreaterThan(100)</code> should return "Over 10"
testString: assert(testGreaterThan(100) === "Over 10");
- text: <code>testGreaterThan(101)</code> should return "Over 100"
testString: assert(testGreaterThan(101) === "Over 100");
- text: <code>testGreaterThan(150)</code> should return "Over 100"
testString: assert(testGreaterThan(150) === "Over 100");
- text: You should use the <code>&gt;</code> operator at least twice
testString: assert(code.match(/val\s*>\s*('|")*\d+('|")*/g).length > 1);
```
@@ -63,14 +68,21 @@ testGreaterThan(10);
</div>
</section>
## Solution
<section id='solution'>
```js
// solution required
function testGreaterThan(val) {
if (val > 100) { // Change this line
return "Over 100";
}
if (val > 10) { // Change this line
return "Over 10";
}
return "10 or Under";
}
```
</section>

View File

@@ -2,37 +2,42 @@
id: 56533eb9ac21ba0edf2244d5
title: Comparison with the Greater Than Or Equal To Operator
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/c6KBqtV
forumTopicId: 16785
localeTitle: Сравнение с более высоким или равным оператору
---
## Description
<section id="description"> Чем <code>greater than or equal to</code> оператору ( <code>&gt;=</code> ), то сравниваются значения двух чисел. Если число слева больше или равно числу справа, оно возвращает <code>true</code> . В противном случае возвращается <code>false</code> . Подобно оператору равенства, который <code>greater than or equal to</code> оператору, будет преобразовывать типы данных при сравнении. <strong>Примеры</strong> <blockquote> 6&gt; = 6 // true <br> 7&gt; = &#39;3&#39; // true <br> 2&gt; = 3 // false <br> &#39;7&#39;&gt; = 9 // false </blockquote></section>
<section id='description'>
Чем <code>greater than or equal to</code> оператору ( <code>&gt;=</code> ), то сравниваются значения двух чисел. Если число слева больше или равно числу справа, оно возвращает <code>true</code> . В противном случае возвращается <code>false</code> . Подобно оператору равенства, который <code>greater than or equal to</code> оператору, будет преобразовывать типы данных при сравнении. <strong>Примеры</strong> <blockquote> 6&gt; = 6 // true <br> 7&gt; = &#39;3&#39; // true <br> 2&gt; = 3 // false <br> &#39;7&#39;&gt; = 9 // false </blockquote>
</section>
## Instructions
<section id="instructions"> Добавьте к указанным линиям оператор, <code>greater than or equal to</code> иметь смысл. </section>
<section id='instructions'>
Добавьте к указанным линиям оператор, <code>greater than or equal to</code> иметь смысл.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: '<code>testGreaterOrEqual(0)</code> должен возвращать «Менее 10»,'
testString: 'assert(testGreaterOrEqual(0) === "Less than 10", "<code>testGreaterOrEqual(0)</code> should return "Less than 10"");'
- text: '<code>testGreaterOrEqual(9)</code> должен вернуть «Менее 10»,'
testString: 'assert(testGreaterOrEqual(9) === "Less than 10", "<code>testGreaterOrEqual(9)</code> should return "Less than 10"");'
- text: '<code>testGreaterOrEqual(10)</code> должен возвращать «10 или более»,'
testString: 'assert(testGreaterOrEqual(10) === "10 or Over", "<code>testGreaterOrEqual(10)</code> should return "10 or Over"");'
- text: '<code>testGreaterOrEqual(11)</code> должен вернуть «10 или более»,'
testString: 'assert(testGreaterOrEqual(11) === "10 or Over", "<code>testGreaterOrEqual(11)</code> should return "10 or Over"");'
- text: '<code>testGreaterOrEqual(19)</code> должен возвращать «10 или более»,'
testString: 'assert(testGreaterOrEqual(19) === "10 or Over", "<code>testGreaterOrEqual(19)</code> should return "10 or Over"");'
- text: '<code>testGreaterOrEqual(100)</code> должен возвращать «20 или более»,'
testString: 'assert(testGreaterOrEqual(100) === "20 or Over", "<code>testGreaterOrEqual(100)</code> should return "20 or Over"");'
- text: '<code>testGreaterOrEqual(21)</code> должен возвращать «20 или более»,'
testString: 'assert(testGreaterOrEqual(21) === "20 or Over", "<code>testGreaterOrEqual(21)</code> should return "20 or Over"");'
- text: 'Вы должны использовать оператор <code>&gt;=</code> по крайней мере, дважды'
testString: 'assert(code.match(/val\s*>=\s*("|")*\d+("|")*/g).length > 1, "You should use the <code>&gt;=</code> operator at least twice");'
- text: <code>testGreaterOrEqual(0)</code> should return "Less than 10"
testString: assert(testGreaterOrEqual(0) === "Less than 10");
- text: <code>testGreaterOrEqual(9)</code> should return "Less than 10"
testString: assert(testGreaterOrEqual(9) === "Less than 10");
- text: <code>testGreaterOrEqual(10)</code> should return "10 or Over"
testString: assert(testGreaterOrEqual(10) === "10 or Over");
- text: <code>testGreaterOrEqual(11)</code> should return "10 or Over"
testString: assert(testGreaterOrEqual(11) === "10 or Over");
- text: <code>testGreaterOrEqual(19)</code> should return "10 or Over"
testString: assert(testGreaterOrEqual(19) === "10 or Over");
- text: <code>testGreaterOrEqual(100)</code> should return "20 or Over"
testString: assert(testGreaterOrEqual(100) === "20 or Over");
- text: <code>testGreaterOrEqual(21)</code> should return "20 or Over"
testString: assert(testGreaterOrEqual(21) === "20 or Over");
- text: You should use the <code>&gt;=</code> operator at least twice
testString: assert(code.match(/val\s*>=\s*('|")*\d+('|")*/g).length > 1);
```
@@ -63,14 +68,23 @@ testGreaterOrEqual(10);
</div>
</section>
## Solution
<section id='solution'>
```js
// solution required
function testGreaterOrEqual(val) {
if (val >= 20) { // Change this line
return "20 or Over";
}
if (val >= 10) { // Change this line
return "10 or Over";
}
return "Less than 10";
}
```
</section>

View File

@@ -2,33 +2,38 @@
id: 56533eb9ac21ba0edf2244d2
title: Comparison with the Inequality Operator
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/cdBm9Sr
forumTopicId: 16787
localeTitle: Сравнение с оператором неравенства
---
## Description
<section id="description"> Оператор неравенства ( <code>!=</code> ) Является противоположным оператору равенства. Это означает «Не равно» и возвращает <code>false</code> когда равенство вернет <code>true</code> и <em>наоборот</em> . Как и оператор равенства, оператор неравенства будет преобразовывать типы данных значений при сравнении. <strong>Примеры</strong> <blockquote> 1! = 2 // true <br> 1! = &quot;1&quot; // false <br> 1! = &#39;1&#39; // false <br> 1! = True // false <br> 0! = False // false </blockquote></section>
<section id='description'>
Оператор неравенства ( <code>!=</code> ) Является противоположным оператору равенства. Это означает «Не равно» и возвращает <code>false</code> когда равенство вернет <code>true</code> и <em>наоборот</em> . Как и оператор равенства, оператор неравенства будет преобразовывать типы данных значений при сравнении. <strong>Примеры</strong> <blockquote> 1! = 2 // true <br> 1! = &quot;1&quot; // false <br> 1! = &#39;1&#39; // false <br> 1! = True // false <br> 0! = False // false </blockquote>
</section>
## Instructions
<section id="instructions"> Добавьте оператор неравенства <code>!=</code> оператор <code>if</code> чтобы функция вернула «Не равно», когда <code>val</code> не эквивалентен <code>99</code> </section>
<section id='instructions'>
Добавьте оператор неравенства <code>!=</code> оператор <code>if</code> чтобы функция вернула «Не равно», когда <code>val</code> не эквивалентен <code>99</code>
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>testNotEqual(99)</code> должен возвращать &quot;Equal&quot;
testString: 'assert(testNotEqual(99) === "Equal", "<code>testNotEqual(99)</code> should return "Equal"");'
- text: <code>testNotEqual(&quot;99&quot;)</code> должен возвращать &quot;Equal&quot;
testString: 'assert(testNotEqual("99") === "Equal", "<code>testNotEqual("99")</code> should return "Equal"");'
- text: <code>testNotEqual(12)</code> должен возвращать «Не <code>testNotEqual(12)</code> »
testString: 'assert(testNotEqual(12) === "Not Equal", "<code>testNotEqual(12)</code> should return "Not Equal"");'
- text: <code>testNotEqual(&quot;12&quot;)</code> должен возвращать «Не равно»
testString: 'assert(testNotEqual("12") === "Not Equal", "<code>testNotEqual("12")</code> should return "Not Equal"");'
- text: <code>testNotEqual(&quot;bob&quot;)</code> должен возвращать «Не равно»
testString: 'assert(testNotEqual("bob") === "Not Equal", "<code>testNotEqual("bob")</code> should return "Not Equal"");'
- text: Вы должны использовать оператор <code>!=</code>
testString: 'assert(code.match(/(?!!==)!=/), "You should use the <code>!=</code> operator");'
- text: <code>testNotEqual(99)</code> should return "Equal"
testString: assert(testNotEqual(99) === "Equal");
- text: <code>testNotEqual("99")</code> should return "Equal"
testString: assert(testNotEqual("99") === "Equal");
- text: <code>testNotEqual(12)</code> should return "Not Equal"
testString: assert(testNotEqual(12) === "Not Equal");
- text: <code>testNotEqual("12")</code> should return "Not Equal"
testString: assert(testNotEqual("12") === "Not Equal");
- text: <code>testNotEqual("bob")</code> should return "Not Equal"
testString: assert(testNotEqual("bob") === "Not Equal");
- text: You should use the <code>!=</code> operator
testString: assert(code.match(/(?!!==)!=/));
```
@@ -55,14 +60,18 @@ testNotEqual(10);
</div>
</section>
## Solution
<section id='solution'>
```js
// solution required
function testNotEqual(val) {
if (val != 99) {
return "Not Equal";
}
return "Equal";
}
```
</section>

View File

@@ -2,35 +2,40 @@
id: 56533eb9ac21ba0edf2244d6
title: Comparison with the Less Than Operator
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/cNVRWtB
forumTopicId: 16789
localeTitle: Сравнение с Менеджером оператора
---
## Description
<section id="description"> <dfn>Менее чем</dfn> оператор ( <code>&lt;</code> ) сравнивает значения двух чисел. Если число слева меньше числа справа, оно возвращает <code>true</code> . В противном случае возвращается <code>false</code> . Как и оператор равенства, <dfn>меньше, чем</dfn> оператор, преобразует типы данных при сравнении. <strong>Примеры</strong> <blockquote> 2 &lt;5 // true <br> &#39;3&#39; &lt;7 // true <br> 5 &lt;5 // false <br> 3 &lt;2 // false <br> &#39;8&#39; &lt;4 // false </blockquote></section>
<section id='description'>
<dfn>Менее чем</dfn> оператор ( <code>&lt;</code> ) сравнивает значения двух чисел. Если число слева меньше числа справа, оно возвращает <code>true</code> . В противном случае возвращается <code>false</code> . Как и оператор равенства, <dfn>меньше, чем</dfn> оператор, преобразует типы данных при сравнении. <strong>Примеры</strong> <blockquote> 2 &lt;5 // true <br> &#39;3&#39; &lt;7 // true <br> 5 &lt;5 // false <br> 3 &lt;2 // false <br> &#39;8&#39; &lt;4 // false </blockquote>
</section>
## Instructions
<section id="instructions"> Добавьте <code>less than</code> операторов к указанным линиям так, чтобы операторы return имели смысл. </section>
<section id='instructions'>
Добавьте <code>less than</code> операторов к указанным линиям так, чтобы операторы return имели смысл.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>testLessThan(0)</code> должен вернуть «Менее 25»
testString: 'assert(testLessThan(0) === "Under 25", "<code>testLessThan(0)</code> should return "Under 25"");'
- text: '<code>testLessThan(24)</code> должен вернуть «Менее 25 лет»,'
testString: 'assert(testLessThan(24) === "Under 25", "<code>testLessThan(24)</code> should return "Under 25"");'
- text: '<code>testLessThan(25)</code> должен вернуть «Менее 55»,'
testString: 'assert(testLessThan(25) === "Under 55", "<code>testLessThan(25)</code> should return "Under 55"");'
- text: <code>testLessThan(54)</code> должен вернуть «Менее 55»
testString: 'assert(testLessThan(54) === "Under 55", "<code>testLessThan(54)</code> should return "Under 55"");'
- text: '<code>testLessThan(55)</code> должен возвращать «55 или более»,'
testString: 'assert(testLessThan(55) === "55 or Over", "<code>testLessThan(55)</code> should return "55 or Over"");'
- text: '<code>testLessThan(99)</code> должен возвращать «55 или более»,'
testString: 'assert(testLessThan(99) === "55 or Over", "<code>testLessThan(99)</code> should return "55 or Over"");'
- text: Вы должны использовать оператор <code>&lt;</code> по крайней мере дважды
testString: 'assert(code.match(/val\s*<\s*("|")*\d+("|")*/g).length > 1, "You should use the <code>&lt;</code> operator at least twice");'
- text: <code>testLessThan(0)</code> should return "Under 25"
testString: assert(testLessThan(0) === "Under 25");
- text: <code>testLessThan(24)</code> should return "Under 25"
testString: assert(testLessThan(24) === "Under 25");
- text: <code>testLessThan(25)</code> should return "Under 55"
testString: assert(testLessThan(25) === "Under 55");
- text: <code>testLessThan(54)</code> should return "Under 55"
testString: assert(testLessThan(54) === "Under 55");
- text: <code>testLessThan(55)</code> should return "55 or Over"
testString: assert(testLessThan(55) === "55 or Over");
- text: <code>testLessThan(99)</code> should return "55 or Over"
testString: assert(testLessThan(99) === "55 or Over");
- text: You should use the <code>&lt;</code> operator at least twice
testString: assert(code.match(/val\s*<\s*('|")*\d+('|")*/g).length > 1);
```
@@ -61,14 +66,23 @@ testLessThan(10);
</div>
</section>
## Solution
<section id='solution'>
```js
// solution required
function testLessThan(val) {
if (val < 25) { // Change this line
return "Under 25";
}
if (val < 55) { // Change this line
return "Under 55";
}
return "55 or Over";
}
```
</section>

View File

@@ -2,37 +2,42 @@
id: 56533eb9ac21ba0edf2244d7
title: Comparison with the Less Than Or Equal To Operator
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/cNVR7Am
forumTopicId: 16788
localeTitle: Сравнение с меньшим или равным оператору
---
## Description
<section id="description"> Оператор ( <code>&lt;=</code> ) (<code>less than or equal to</code>) сравнивает значения двух чисел. Если число слева меньше или равно числу справа, выражение возвращает <code>true</code> , и если число слева больше числа справа, оно возвращает <code>false</code> . Так же как и оператор равенства, <code>less than or equal to</code> преобразует типы данных. <strong>Примеры</strong> <blockquote> 4 &lt;= 5 // true <br> &#39;7&#39; &lt;= 7 // true <br> 5 &lt;= 5 // true <br> 3 &lt;= 2 // false <br> &#39;8&#39; &lt;= 4 // false </blockquote></section>
<section id='description'>
Оператор ( <code>&lt;=</code> ) (<code>less than or equal to</code>) сравнивает значения двух чисел. Если число слева меньше или равно числу справа, выражение возвращает <code>true</code> , и если число слева больше числа справа, оно возвращает <code>false</code> . Так же как и оператор равенства, <code>less than or equal to</code> преобразует типы данных. <strong>Примеры</strong> <blockquote> 4 &lt;= 5 // true <br> &#39;7&#39; &lt;= 7 // true <br> 5 &lt;= 5 // true <br> 3 &lt;= 2 // false <br> &#39;8&#39; &lt;= 4 // false </blockquote>
</section>
## Instructions
<section id="instructions"> Добавьте оператор ( <code>&lt;=</code> ) чтобы функция работала правильно. </section>
<section id='instructions'>
Добавьте оператор ( <code>&lt;=</code> ) чтобы функция работала правильно.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: '<code>testLessOrEqual(0)</code> должен возвращать «Меньше, чем или <code>testLessOrEqual(0)</code> 12»,'
testString: 'assert(testLessOrEqual(0) === "Smaller Than or Equal to 12", "<code>testLessOrEqual(0)</code> should return "Smaller Than or Equal to 12"");'
- text: '<code>testLessOrEqual(11)</code> должен возвращать «Меньше, чем или <code>testLessOrEqual(11)</code> 12»,'
testString: 'assert(testLessOrEqual(11) === "Smaller Than or Equal to 12", "<code>testLessOrEqual(11)</code> should return "Smaller Than or Equal to 12"");'
- text: '<code>testLessOrEqual(12)</code> должен возвращать «Меньше, чем или <code>testLessOrEqual(12)</code> 12»,'
testString: 'assert(testLessOrEqual(12) === "Smaller Than or Equal to 12", "<code>testLessOrEqual(12)</code> should return "Smaller Than or Equal to 12"");'
- text: '<code>testLessOrEqual(23)</code> должен возвращать значение «Меньше, чем <code>testLessOrEqual(23)</code> 24»,'
testString: 'assert(testLessOrEqual(23) === "Smaller Than or Equal to 24", "<code>testLessOrEqual(23)</code> should return "Smaller Than or Equal to 24"");'
- text: '<code>testLessOrEqual(24)</code> должен возвращать значение «Меньше, чем <code>testLessOrEqual(24)</code> 24»,'
testString: 'assert(testLessOrEqual(24) === "Smaller Than or Equal to 24", "<code>testLessOrEqual(24)</code> should return "Smaller Than or Equal to 24"");'
- text: '<code>testLessOrEqual(25)</code> должен вернуть «Больше, чем 24»,'
testString: 'assert(testLessOrEqual(25) === "More Than 24", "<code>testLessOrEqual(25)</code> should return "More Than 24"");'
- text: '<code>testLessOrEqual(55)</code> должен вернуть «Больше, чем 24»,'
testString: 'assert(testLessOrEqual(55) === "More Than 24", "<code>testLessOrEqual(55)</code> should return "More Than 24"");'
- text: 'Вы должны использовать оператор <code>&lt;=</code> по крайней мере, дважды'
testString: 'assert(code.match(/val\s*<=\s*("|")*\d+("|")*/g).length > 1, "You should use the <code>&lt;=</code> operator at least twice");'
- text: <code>testLessOrEqual(0)</code> should return "Smaller Than or Equal to 12"
testString: assert(testLessOrEqual(0) === "Smaller Than or Equal to 12");
- text: <code>testLessOrEqual(11)</code> should return "Smaller Than or Equal to 12"
testString: assert(testLessOrEqual(11) === "Smaller Than or Equal to 12");
- text: <code>testLessOrEqual(12)</code> should return "Smaller Than or Equal to 12"
testString: assert(testLessOrEqual(12) === "Smaller Than or Equal to 12");
- text: <code>testLessOrEqual(23)</code> should return "Smaller Than or Equal to 24"
testString: assert(testLessOrEqual(23) === "Smaller Than or Equal to 24");
- text: <code>testLessOrEqual(24)</code> should return "Smaller Than or Equal to 24"
testString: assert(testLessOrEqual(24) === "Smaller Than or Equal to 24");
- text: <code>testLessOrEqual(25)</code> should return "More Than 24"
testString: assert(testLessOrEqual(25) === "More Than 24");
- text: <code>testLessOrEqual(55)</code> should return "More Than 24"
testString: assert(testLessOrEqual(55) === "More Than 24");
- text: You should use the <code>&lt;=</code> operator at least twice
testString: assert(code.match(/val\s*<=\s*('|")*\d+('|")*/g).length > 1);
```
@@ -63,14 +68,23 @@ testLessOrEqual(10);
</div>
</section>
## Solution
<section id='solution'>
```js
// solution required
function testLessOrEqual(val) {
if (val <= 12) { // Change this line
return "Smaller Than or Equal to 12";
}
if (val <= 24) { // Change this line
return "Smaller Than or Equal to 24";
}
return "More Than 24";
}
```
</section>

View File

@@ -2,29 +2,34 @@
id: 56533eb9ac21ba0edf2244d1
title: Comparison with the Strict Equality Operator
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/cy87atr
forumTopicId: 16790
localeTitle: Сравнение с оператором строгого равенства
---
## Description
<section id="description"> Строгое равенство ( <code>===</code> ) является аналогом оператора равенства ( <code>==</code> ). Однако, в отличие от оператора равенства, который пытается преобразовать оба значения в общий тип, строгий оператор равенства не выполняет преобразование типа. Если сравниваемые значения имеют разные типы, они считаются неравными, а оператор строгого равенства возвращает false. <strong>Примеры</strong> <blockquote> 3 === 3 // true <br> 3 === &#39;3&#39; // false </blockquote> Во втором примере <code>3</code> является типом <code>Number</code> а <code>&#39;3&#39;</code> - <code>String</code> . </section>
<section id='description'>
Строгое равенство ( <code>===</code> ) является аналогом оператора равенства ( <code>==</code> ). Однако, в отличие от оператора равенства, который пытается преобразовать оба значения в общий тип, строгий оператор равенства не выполняет преобразование типа. Если сравниваемые значения имеют разные типы, они считаются неравными, а оператор строгого равенства возвращает false. <strong>Примеры</strong> <blockquote> 3 === 3 // true <br> 3 === &#39;3&#39; // false </blockquote> Во втором примере <code>3</code> является типом <code>Number</code> а <code>&#39;3&#39;</code> - <code>String</code> .
</section>
## Instructions
<section id="instructions"> Используйте оператор строгого равенства в выражении <code>if</code> чтобы функция вернула «Равно», когда <code>val</code> строго равно <code>7</code> </section>
<section id='instructions'>
Используйте оператор строгого равенства в выражении <code>if</code> чтобы функция вернула «Равно», когда <code>val</code> строго равно <code>7</code>
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>testStrict(10)</code> должен вернуть «Не <code>testStrict(10)</code> »
testString: 'assert(testStrict(10) === "Not Equal", "<code>testStrict(10)</code> should return "Not Equal"");'
- text: <code>testStrict(7)</code> должен вернуть «Равный»
testString: 'assert(testStrict(7) === "Equal", "<code>testStrict(7)</code> should return "Equal"");'
- text: <code>testStrict(&quot;7&quot;)</code> должен возвращать &quot;Не равно&quot;
testString: 'assert(testStrict("7") === "Not Equal", "<code>testStrict("7")</code> should return "Not Equal"");'
- text: Вы должны использовать оператор <code>===</code>
testString: 'assert(code.match(/(val\s*===\s*\d+)|(\d+\s*===\s*val)/g).length > 0, "You should use the <code>===</code> operator");'
- text: <code>testStrict(10)</code> should return "Not Equal"
testString: assert(testStrict(10) === "Not Equal");
- text: <code>testStrict(7)</code> should return "Equal"
testString: assert(testStrict(7) === "Equal");
- text: <code>testStrict("7")</code> should return "Not Equal"
testString: assert(testStrict("7") === "Not Equal");
- text: You should use the <code>===</code> operator
testString: assert(code.match(/(val\s*===\s*\d+)|(\d+\s*===\s*val)/g).length > 0);
```
@@ -51,14 +56,18 @@ testStrict(10);
</div>
</section>
## Solution
<section id='solution'>
```js
// solution required
function testStrict(val) {
if (val === 7) {
return "Equal";
}
return "Not Equal";
}
```
</section>

View File

@@ -2,31 +2,36 @@
id: 56533eb9ac21ba0edf2244d3
title: Comparison with the Strict Inequality Operator
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/cKekkUy
forumTopicId: 16791
localeTitle: Сравнение с оператором строгого неравенства
---
## Description
<section id="description"> Оператор строгого неравенства ( <code>!==</code> ) является логической противоположностью оператора строгого равенства. Это означает «строго не равно» и возвращает <code>false</code> когда строгое равенство вернет <code>true</code> и <em>наоборот</em> . Строгое неравенство не будет преобразовывать типы данных. <strong>Примеры</strong> <blockquote> 3! == 3 // false <br> 3! == &#39;3&#39; // true <br> 4! == 3 // true </blockquote></section>
<section id='description'>
Оператор строгого неравенства ( <code>!==</code> ) является логической противоположностью оператора строгого равенства. Это означает «строго не равно» и возвращает <code>false</code> когда строгое равенство вернет <code>true</code> и <em>наоборот</em> . Строгое неравенство не будет преобразовывать типы данных. <strong>Примеры</strong> <blockquote> 3! == 3 // false <br> 3! == &#39;3&#39; // true <br> 4! == 3 // true </blockquote>
</section>
## Instructions
<section id="instructions"> Добавьте <code>strict inequality operator</code> <code>if</code> чтобы функция вернула «Не равно», когда <code>val</code> строго не равно <code>17</code> </section>
<section id='instructions'>
Добавьте <code>strict inequality operator</code> <code>if</code> чтобы функция вернула «Не равно», когда <code>val</code> строго не равно <code>17</code>
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: '<code>testStrictNotEqual(17)</code> должен вернуть «Равный»,'
testString: 'assert(testStrictNotEqual(17) === "Equal", "<code>testStrictNotEqual(17)</code> should return "Equal"");'
- text: <code>testStrictNotEqual(&quot;17&quot;)</code> должен возвращать &quot;Не равно&quot;
testString: 'assert(testStrictNotEqual("17") === "Not Equal", "<code>testStrictNotEqual("17")</code> should return "Not Equal"");'
- text: <code>testStrictNotEqual(12)</code> должен вернуть «Не <code>testStrictNotEqual(12)</code> »
testString: 'assert(testStrictNotEqual(12) === "Not Equal", "<code>testStrictNotEqual(12)</code> should return "Not Equal"");'
- text: <code>testStrictNotEqual(&quot;bob&quot;)</code> должен возвращать &quot;Не равно&quot;
testString: 'assert(testStrictNotEqual("bob") === "Not Equal", "<code>testStrictNotEqual("bob")</code> should return "Not Equal"");'
- text: Вы должны использовать оператор <code>!==</code>
testString: 'assert(code.match(/(val\s*!==\s*\d+)|(\d+\s*!==\s*val)/g).length > 0, "You should use the <code>!==</code> operator");'
- text: <code>testStrictNotEqual(17)</code> should return "Equal"
testString: assert(testStrictNotEqual(17) === "Equal");
- text: <code>testStrictNotEqual("17")</code> should return "Not Equal"
testString: assert(testStrictNotEqual("17") === "Not Equal");
- text: <code>testStrictNotEqual(12)</code> should return "Not Equal"
testString: assert(testStrictNotEqual(12) === "Not Equal");
- text: <code>testStrictNotEqual("bob")</code> should return "Not Equal"
testString: assert(testStrictNotEqual("bob") === "Not Equal");
- text: You should use the <code>!==</code> operator
testString: assert(code.match(/(val\s*!==\s*\d+)|(\d+\s*!==\s*val)/g).length > 0);
```
@@ -40,12 +45,7 @@ tests:
```js
// Setup
function testStrictNotEqual(val) {
// Only Change Code Below this Line
if (val) {
// Only Change Code Above this Line
if (val) { // Change this line
return "Not Equal";
}
return "Equal";
@@ -58,14 +58,18 @@ testStrictNotEqual(10);
</div>
</section>
## Solution
<section id='solution'>
```js
// solution required
function testStrictNotEqual(val) {
if (val !== 17) {
return "Not Equal";
}
return "Equal";
}
```
</section>

View File

@@ -2,41 +2,46 @@
id: 56533eb9ac21ba0edf2244d8
title: Comparisons with the Logical And Operator
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/cvbRVtr
forumTopicId: 16799
localeTitle: Сравнение с логикой и оператором
---
## Description
<section id="description"> Иногда вам нужно проверять несколько штук одновременно. <dfn>Логический и</dfn> operator ( <code>&amp;&amp;</code> ) возвращают <code>true</code> тогда и только тогда, когда <dfn>операнды</dfn> слева и справа от него являются истинными. Тот же эффект может быть достигнут путем вложения выражения if внутри другого, если: <blockquote> если (num&gt; 5) { <br> если (num &lt;10) { <br> вернуть «Да»; <br> } <br> } <br> вернуть «Нет»; </blockquote> будет возвращаться только «Да», если <code>num</code> больше <code>5</code> и меньше <code>10</code> . Та же логика может быть записана как: <blockquote> if (num&gt; 5 &amp;&amp; num &lt;10) { <br> вернуть «Да»; <br> } <br> вернуть «Нет»; </blockquote></section>
<section id='description'>
Иногда вам нужно проверять несколько штук одновременно. <dfn>Логический и</dfn> operator ( <code>&amp;&amp;</code> ) возвращают <code>true</code> тогда и только тогда, когда <dfn>операнды</dfn> слева и справа от него являются истинными. Тот же эффект может быть достигнут путем вложения выражения if внутри другого, если: <blockquote> если (num&gt; 5) { <br> если (num &lt;10) { <br> вернуть «Да»; <br> } <br> } <br> вернуть «Нет»; </blockquote> будет возвращаться только «Да», если <code>num</code> больше <code>5</code> и меньше <code>10</code> . Та же логика может быть записана как: <blockquote> if (num&gt; 5 &amp;&amp; num &lt;10) { <br> вернуть «Да»; <br> } <br> вернуть «Нет»; </blockquote>
</section>
## Instructions
<section id="instructions"> Объедините два оператора if в один оператор, который вернет <code>&quot;Yes&quot;</code> если значение <code>val</code> меньше или равно <code>50</code> и больше или равно <code>25</code> . В противном случае вернется <code>&quot;No&quot;</code> . </section>
<section id='instructions'>
Объедините два оператора if в один оператор, который вернет <code>&quot;Yes&quot;</code> если значение <code>val</code> меньше или равно <code>50</code> и больше или равно <code>25</code> . В противном случае вернется <code>&quot;No&quot;</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: Вы должны использовать оператор <code>&amp;&amp;</code> один раз
testString: 'assert(code.match(/&&/g).length === 1, "You should use the <code>&&</code> operator once");'
- text: У вас должен быть только один оператор <code>if</code>
testString: 'assert(code.match(/if/g).length === 1, "You should only have one <code>if</code> statement");'
- text: <code>testLogicalAnd(0)</code> должен возвращать «Нет»
testString: 'assert(testLogicalAnd(0) === "No", "<code>testLogicalAnd(0)</code> should return "No"");'
- text: '<code>testLogicalAnd(24)</code> должен возвращать «Нет»,'
testString: 'assert(testLogicalAnd(24) === "No", "<code>testLogicalAnd(24)</code> should return "No"");'
- text: '<code>testLogicalAnd(25)</code> должен вернуть «Да»,'
testString: 'assert(testLogicalAnd(25) === "Yes", "<code>testLogicalAnd(25)</code> should return "Yes"");'
- text: <code>testLogicalAnd(30)</code> должен вернуть «Да»
testString: 'assert(testLogicalAnd(30) === "Yes", "<code>testLogicalAnd(30)</code> should return "Yes"");'
- text: '<code>testLogicalAnd(50)</code> должен возвращать «Да»,'
testString: 'assert(testLogicalAnd(50) === "Yes", "<code>testLogicalAnd(50)</code> should return "Yes"");'
- text: '<code>testLogicalAnd(51)</code> должен возвращать «Нет»,'
testString: 'assert(testLogicalAnd(51) === "No", "<code>testLogicalAnd(51)</code> should return "No"");'
- text: <code>testLogicalAnd(75)</code> должен возвращать «Нет»
testString: 'assert(testLogicalAnd(75) === "No", "<code>testLogicalAnd(75)</code> should return "No"");'
- text: <code>testLogicalAnd(80)</code> должен возвращать &quot;Нет&quot;
testString: 'assert(testLogicalAnd(80) === "No", "<code>testLogicalAnd(80)</code> should return "No"");'
- text: You should use the <code>&&</code> operator once
testString: assert(code.match(/&&/g).length === 1);
- text: You should only have one <code>if</code> statement
testString: assert(code.match(/if/g).length === 1);
- text: <code>testLogicalAnd(0)</code> should return "No"
testString: assert(testLogicalAnd(0) === "No");
- text: <code>testLogicalAnd(24)</code> should return "No"
testString: assert(testLogicalAnd(24) === "No");
- text: <code>testLogicalAnd(25)</code> should return "Yes"
testString: assert(testLogicalAnd(25) === "Yes");
- text: <code>testLogicalAnd(30)</code> should return "Yes"
testString: assert(testLogicalAnd(30) === "Yes");
- text: <code>testLogicalAnd(50)</code> should return "Yes"
testString: assert(testLogicalAnd(50) === "Yes");
- text: <code>testLogicalAnd(51)</code> should return "No"
testString: assert(testLogicalAnd(51) === "No");
- text: <code>testLogicalAnd(75)</code> should return "No"
testString: assert(testLogicalAnd(75) === "No");
- text: <code>testLogicalAnd(80)</code> should return "No"
testString: assert(testLogicalAnd(80) === "No");
```
@@ -68,14 +73,18 @@ testLogicalAnd(10);
</div>
</section>
## Solution
<section id='solution'>
```js
// solution required
function testLogicalAnd(val) {
if (val >= 25 && val <= 50) {
return "Yes";
}
return "No";
}
```
</section>

View File

@@ -2,41 +2,46 @@
id: 56533eb9ac21ba0edf2244d9
title: Comparisons with the Logical Or Operator
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/cEPrGTN
forumTopicId: 16800
localeTitle: Сравнение с логическим или оператором
---
## Description
<section id="description"> <dfn>Логический или</dfn> оператор ( <code>||</code> ) возвращает <code>true</code> если любой из <dfn>операндов</dfn> <code>true</code> . В противном случае возвращается <code>false</code> . <dfn>Логический или</dfn> оператор состоит из двух символов трубы ( <code>|</code> ). Обычно это можно найти между клавишами Backspace и Enter. Нижеприведенный рисунок должен выглядеть знакомым с предыдущих точек: <blockquote> если (num&gt; 10) { <br> вернуть «Нет»; <br> } <br> if (num &lt;5) { <br> вернуть «Нет»; <br> } <br> вернуть «Да»; </blockquote> вернет «Да» только в том случае, если <code>num</code> находится между <code>5</code> и <code>10</code> (включено 5 и 10). Та же логика может быть записана как: <blockquote> если (num&gt; 10 || num &lt;5) { <br> вернуть «Нет»; <br> } <br> вернуть «Да»; </blockquote></section>
<section id='description'>
<dfn>Логический или</dfn> оператор ( <code>||</code> ) возвращает <code>true</code> если любой из <dfn>операндов</dfn> <code>true</code> . В противном случае возвращается <code>false</code> . <dfn>Логический или</dfn> оператор состоит из двух символов трубы ( <code>|</code> ). Обычно это можно найти между клавишами Backspace и Enter. Нижеприведенный рисунок должен выглядеть знакомым с предыдущих точек: <blockquote> если (num&gt; 10) { <br> вернуть «Нет»; <br> } <br> if (num &lt;5) { <br> вернуть «Нет»; <br> } <br> вернуть «Да»; </blockquote> вернет «Да» только в том случае, если <code>num</code> находится между <code>5</code> и <code>10</code> (включено 5 и 10). Та же логика может быть записана как: <blockquote> если (num&gt; 10 || num &lt;5) { <br> вернуть «Нет»; <br> } <br> вернуть «Да»; </blockquote>
</section>
## Instructions
<section id="instructions"> Объедините два оператора <code>if</code> в один оператор, который возвращает <code>&quot;Outside&quot;</code> если <code>val</code> не находится между <code>10</code> и <code>20</code> , включительно. В противном случае верните <code>&quot;Inside&quot;</code> . </section>
<section id='instructions'>
Объедините два оператора <code>if</code> в один оператор, который возвращает <code>&quot;Outside&quot;</code> если <code>val</code> не находится между <code>10</code> и <code>20</code> , включительно. В противном случае верните <code>&quot;Inside&quot;</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: Вы должны использовать <code>||</code> оператор один раз
testString: 'assert(code.match(/\|\|/g).length === 1, "You should use the <code>||</code> operator once");'
- text: У вас должен быть только один оператор <code>if</code>
testString: 'assert(code.match(/if/g).length === 1, "You should only have one <code>if</code> statement");'
- text: <code>testLogicalOr(0)</code> должен возвращать &quot;Outside&quot;
testString: 'assert(testLogicalOr(0) === "Outside", "<code>testLogicalOr(0)</code> should return "Outside"");'
- text: <code>testLogicalOr(9)</code> должен возвращать &quot;Outside&quot;
testString: 'assert(testLogicalOr(9) === "Outside", "<code>testLogicalOr(9)</code> should return "Outside"");'
- text: <code>testLogicalOr(10)</code> должен возвращать &quot;Inside&quot;
testString: 'assert(testLogicalOr(10) === "Inside", "<code>testLogicalOr(10)</code> should return "Inside"");'
- text: <code>testLogicalOr(15)</code> должен возвращать &quot;Inside&quot;
testString: 'assert(testLogicalOr(15) === "Inside", "<code>testLogicalOr(15)</code> should return "Inside"");'
- text: <code>testLogicalOr(19)</code> должен возвращать &quot;Inside&quot;
testString: 'assert(testLogicalOr(19) === "Inside", "<code>testLogicalOr(19)</code> should return "Inside"");'
- text: <code>testLogicalOr(20)</code> должен возвращать &quot;Inside&quot;
testString: 'assert(testLogicalOr(20) === "Inside", "<code>testLogicalOr(20)</code> should return "Inside"");'
- text: <code>testLogicalOr(21)</code> должен возвращать «Outside»
testString: 'assert(testLogicalOr(21) === "Outside", "<code>testLogicalOr(21)</code> should return "Outside"");'
- text: <code>testLogicalOr(25)</code> должен возвращать &quot;Outside&quot;
testString: 'assert(testLogicalOr(25) === "Outside", "<code>testLogicalOr(25)</code> should return "Outside"");'
- text: You should use the <code>||</code> operator once
testString: assert(code.match(/\|\|/g).length === 1);
- text: You should only have one <code>if</code> statement
testString: assert(code.match(/if/g).length === 1);
- text: <code>testLogicalOr(0)</code> should return "Outside"
testString: assert(testLogicalOr(0) === "Outside");
- text: <code>testLogicalOr(9)</code> should return "Outside"
testString: assert(testLogicalOr(9) === "Outside");
- text: <code>testLogicalOr(10)</code> should return "Inside"
testString: assert(testLogicalOr(10) === "Inside");
- text: <code>testLogicalOr(15)</code> should return "Inside"
testString: assert(testLogicalOr(15) === "Inside");
- text: <code>testLogicalOr(19)</code> should return "Inside"
testString: assert(testLogicalOr(19) === "Inside");
- text: <code>testLogicalOr(20)</code> should return "Inside"
testString: assert(testLogicalOr(20) === "Inside");
- text: <code>testLogicalOr(21)</code> should return "Outside"
testString: assert(testLogicalOr(21) === "Outside");
- text: <code>testLogicalOr(25)</code> should return "Outside"
testString: assert(testLogicalOr(25) === "Outside");
```
@@ -70,14 +75,18 @@ testLogicalOr(15);
</div>
</section>
## Solution
<section id='solution'>
```js
// solution required
function testLogicalOr(val) {
if (val < 10 || val > 20) {
return "Outside";
}
return "Inside";
}
```
</section>

View File

@@ -2,31 +2,36 @@
id: 56533eb9ac21ba0edf2244af
title: Compound Assignment With Augmented Addition
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/cDR6LCb
forumTopicId: 16661
localeTitle: Соединение с добавленным дополнением
---
## Description
<section id="description"> В программировании обычно используются назначения для изменения содержимого переменной. Помните, что все справа от знака равенства оценивается первым, поэтому мы можем сказать: <code>myVar = myVar + 5;</code> добавить <code>5</code> к <code>myVar</code> . Поскольку это такая общая схема, существуют операторы, которые выполняют как математическую операцию, так и назначение за один шаг. Одним из таких операторов является оператор <code>+=</code> . <blockquote> var myVar = 1; <br> myVar + = 5; <br> console.log (MyVar); // Возвращает 6 </blockquote></section>
<section id='description'>
В программировании обычно используются назначения для изменения содержимого переменной. Помните, что все справа от знака равенства оценивается первым, поэтому мы можем сказать: <code>myVar = myVar + 5;</code> добавить <code>5</code> к <code>myVar</code> . Поскольку это такая общая схема, существуют операторы, которые выполняют как математическую операцию, так и назначение за один шаг. Одним из таких операторов является оператор <code>+=</code> . <blockquote> var myVar = 1; <br> myVar + = 5; <br> console.log (MyVar); // Возвращает 6 </blockquote>
</section>
## Instructions
<section id="instructions"> Преобразуйте назначения для <code>a</code> , <code>b</code> и <code>c</code> чтобы использовать оператор <code>+=</code> . </section>
<section id='instructions'>
Преобразуйте назначения для <code>a</code> , <code>b</code> и <code>c</code> чтобы использовать оператор <code>+=</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>a</code> должно равняться <code>15</code>
testString: 'assert(a === 15, "<code>a</code> should equal <code>15</code>");'
- text: <code>b</code> должно равняться <code>26</code>
testString: 'assert(b === 26, "<code>b</code> should equal <code>26</code>");'
- text: <code>c</code> должно равняться <code>19</code>
testString: 'assert(c === 19, "<code>c</code> should equal <code>19</code>");'
- text: Вы должны использовать оператор <code>+=</code> для каждой переменной
testString: 'assert(code.match(/\+=/g).length === 3, "You should use the <code>+=</code> operator for each variable");'
- text: Не изменяйте код над строкой
testString: 'assert(/var a = 3;/.test(code) && /var b = 17;/.test(code) && /var c = 12;/.test(code), "Do not modify the code above the line");'
- text: <code>a</code> should equal <code>15</code>
testString: assert(a === 15);
- text: <code>b</code> should equal <code>26</code>
testString: assert(b === 26);
- text: <code>c</code> should equal <code>19</code>
testString: assert(c === 19);
- text: You should use the <code>+=</code> operator for each variable
testString: assert(code.match(/\+=/g).length === 3);
- text: Do not modify the code above the line
testString: assert(/var a = 3;/.test(code) && /var b = 17;/.test(code) && /var c = 12;/.test(code));
```
@@ -52,12 +57,12 @@ c = c + 7;
</div>
### After Test
### After Tests
<div id='js-teardown'>
```js
console.info('after the test');
(function(a,b,c){ return "a = " + a + ", b = " + b + ", c = " + c; })(a,b,c);
```
</div>
@@ -68,6 +73,13 @@ console.info('after the test');
<section id='solution'>
```js
// solution required
var a = 3;
var b = 17;
var c = 12;
a += 12;
b += 9;
c += 7;
```
</section>

View File

@@ -2,31 +2,36 @@
id: 56533eb9ac21ba0edf2244b2
title: Compound Assignment With Augmented Division
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/c2QvKT2
forumTopicId: 16659
localeTitle: Соединение с расширенным делением
---
## Description
<section id="description"> Оператор <code>/=</code> делит переменную на другое число. <code>myVar = myVar / 5;</code> <code>myVar</code> на <code>5</code> . Это можно переписать как: <code>myVar /= 5;</code> </section>
<section id='description'>
Оператор <code>/=</code> делит переменную на другое число. <code>myVar = myVar / 5;</code> <code>myVar</code> на <code>5</code> . Это можно переписать как: <code>myVar /= 5;</code>
</section>
## Instructions
<section id="instructions"> Преобразуйте присвоения для <code>a</code> , <code>b</code> и <code>c</code> для использования оператора <code>/=</code> . </section>
<section id='instructions'>
Преобразуйте присвоения для <code>a</code> , <code>b</code> и <code>c</code> для использования оператора <code>/=</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>a</code> должно равняться <code>4</code>
testString: 'assert(a === 4, "<code>a</code> should equal <code>4</code>");'
- text: <code>b</code> должно равняться <code>27</code>
testString: 'assert(b === 27, "<code>b</code> should equal <code>27</code>");'
- text: <code>c</code> должно равняться <code>3</code>
testString: 'assert(c === 3, "<code>c</code> should equal <code>3</code>");'
- text: Вы должны использовать оператор <code>/=</code> для каждой переменной
testString: 'assert(code.match(/\/=/g).length === 3, "You should use the <code>/=</code> operator for each variable");'
- text: Не изменяйте код над строкой
testString: 'assert(/var a = 48;/.test(code) && /var b = 108;/.test(code) && /var c = 33;/.test(code), "Do not modify the code above the line");'
- text: <code>a</code> should equal <code>4</code>
testString: assert(a === 4);
- text: <code>b</code> should equal <code>27</code>
testString: assert(b === 27);
- text: <code>c</code> should equal <code>3</code>
testString: assert(c === 3);
- text: You should use the <code>/=</code> operator for each variable
testString: assert(code.match(/\/=/g).length === 3);
- text: Do not modify the code above the line
testString: assert(/var a = 48;/.test(code) && /var b = 108;/.test(code) && /var c = 33;/.test(code));
```
@@ -52,12 +57,12 @@ c = c / 11;
</div>
### After Test
### After Tests
<div id='js-teardown'>
```js
console.info('after the test');
(function(a,b,c){ return "a = " + a + ", b = " + b + ", c = " + c; })(a,b,c);
```
</div>
@@ -68,6 +73,13 @@ console.info('after the test');
<section id='solution'>
```js
// solution required
var a = 48;
var b = 108;
var c = 33;
a /= 12;
b /= 4;
c /= 11;
```
</section>

View File

@@ -2,31 +2,36 @@
id: 56533eb9ac21ba0edf2244b1
title: Compound Assignment With Augmented Multiplication
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/c83vrfa
forumTopicId: 16662
localeTitle: Соединение с расширенным умножением
---
## Description
<section id="description"> Оператор <code>*=</code> умножает переменную на число. <code>myVar = myVar * 5;</code> умножит <code>myVar</code> на <code>5</code> . Это можно переписать как: <code>myVar *= 5;</code> </section>
<section id='description'>
Оператор <code>*=</code> умножает переменную на число. <code>myVar = myVar * 5;</code> умножит <code>myVar</code> на <code>5</code> . Это можно переписать как: <code>myVar *= 5;</code>
</section>
## Instructions
<section id="instructions"> Преобразуйте присвоения для <code>a</code> , <code>b</code> и <code>c</code> чтобы использовать оператор <code>*=</code> . </section>
<section id='instructions'>
Преобразуйте присвоения для <code>a</code> , <code>b</code> и <code>c</code> чтобы использовать оператор <code>*=</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>a</code> должно равняться <code>25</code>
testString: 'assert(a === 25, "<code>a</code> should equal <code>25</code>");'
- text: <code>b</code> должно равняться <code>36</code>
testString: 'assert(b === 36, "<code>b</code> should equal <code>36</code>");'
- text: <code>c</code> должно равняться <code>46</code>
testString: 'assert(c === 46, "<code>c</code> should equal <code>46</code>");'
- text: Вы должны использовать оператор <code>*=</code> для каждой переменной
testString: 'assert(code.match(/\*=/g).length === 3, "You should use the <code>*=</code> operator for each variable");'
- text: Не изменяйте код над строкой
testString: 'assert(/var a = 5;/.test(code) && /var b = 12;/.test(code) && /var c = 4\.6;/.test(code), "Do not modify the code above the line");'
- text: <code>a</code> should equal <code>25</code>
testString: assert(a === 25);
- text: <code>b</code> should equal <code>36</code>
testString: assert(b === 36);
- text: <code>c</code> should equal <code>46</code>
testString: assert(c === 46);
- text: You should use the <code>*=</code> operator for each variable
testString: assert(code.match(/\*=/g).length === 3);
- text: Do not modify the code above the line
testString: assert(/var a = 5;/.test(code) && /var b = 12;/.test(code) && /var c = 4\.6;/.test(code));
```
@@ -52,12 +57,12 @@ c = c * 10;
</div>
### After Test
### After Tests
<div id='js-teardown'>
```js
console.info('after the test');
(function(a,b,c){ return "a = " + a + ", b = " + b + ", c = " + c; })(a,b,c);
```
</div>
@@ -68,6 +73,13 @@ console.info('after the test');
<section id='solution'>
```js
// solution required
var a = 5;
var b = 12;
var c = 4.6;
a *= 5;
b *= 3;
c *= 10;
```
</section>

View File

@@ -2,31 +2,36 @@
id: 56533eb9ac21ba0edf2244b0
title: Compound Assignment With Augmented Subtraction
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/c2Qv7AV
forumTopicId: 16660
localeTitle: Соединение с расширенной вычитанием
---
## Description
<section id="description"> Как и оператор <code>+=</code> , <code>-=</code> вычитает число из переменной. <code>myVar = myVar - 5;</code> вычитает <code>5</code> из <code>myVar</code> . Это можно переписать как: <code>myVar -= 5;</code> </section>
<section id='description'>
Как и оператор <code>+=</code> , <code>-=</code> вычитает число из переменной. <code>myVar = myVar - 5;</code> вычитает <code>5</code> из <code>myVar</code> . Это можно переписать как: <code>myVar -= 5;</code>
</section>
## Instructions
<section id="instructions"> Преобразуйте присвоения для <code>a</code> , <code>b</code> и <code>c</code> для использования оператора <code>-=</code> . </section>
<section id='instructions'>
Преобразуйте присвоения для <code>a</code> , <code>b</code> и <code>c</code> для использования оператора <code>-=</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>a</code> должно равняться <code>5</code>
testString: 'assert(a === 5, "<code>a</code> should equal <code>5</code>");'
- text: <code>b</code> должно равняться <code>-6</code>
testString: 'assert(b === -6, "<code>b</code> should equal <code>-6</code>");'
- text: <code>c</code> должно равняться <code>2</code>
testString: 'assert(c === 2, "<code>c</code> should equal <code>2</code>");'
- text: Вы должны использовать оператор <code>-=</code> для каждой переменной
testString: 'assert(code.match(/-=/g).length === 3, "You should use the <code>-=</code> operator for each variable");'
- text: Не изменяйте код над строкой
testString: 'assert(/var a = 11;/.test(code) && /var b = 9;/.test(code) && /var c = 3;/.test(code), "Do not modify the code above the line");'
- text: <code>a</code> should equal <code>5</code>
testString: assert(a === 5);
- text: <code>b</code> should equal <code>-6</code>
testString: assert(b === -6);
- text: <code>c</code> should equal <code>2</code>
testString: assert(c === 2);
- text: You should use the <code>-=</code> operator for each variable
testString: assert(code.match(/-=/g).length === 3);
- text: Do not modify the code above the line
testString: assert(/var a = 11;/.test(code) && /var b = 9;/.test(code) && /var c = 3;/.test(code));
```
@@ -52,12 +57,12 @@ c = c - 1;
</div>
### After Test
### After Tests
<div id='js-teardown'>
```js
console.info('after the test');
(function(a,b,c){ return "a = " + a + ", b = " + b + ", c = " + c; })(a,b,c);
```
</div>
@@ -68,6 +73,13 @@ console.info('after the test');
<section id='solution'>
```js
// solution required
var a = 11;
var b = 9;
var c = 3;
a -= 6;
b -= 15;
c -= 1;
```
</section>

View File

@@ -2,29 +2,34 @@
id: 56533eb9ac21ba0edf2244b7
title: Concatenating Strings with Plus Operator
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/cNpM8AN
forumTopicId: 16802
localeTitle: Конкатенация строк с помощью оператора Plus
---
## Description
<section id="description"> В JavaScript, когда оператор <code>+</code> используется со значением <code>String</code> , он называется оператором <dfn>конкатенации</dfn> . Вы можете создать новую строку из других строк путем <dfn>конкатенации</dfn> их вместе. <strong>пример</strong> <blockquote> «Меня зовут Алан, +, я конкатенирую». </blockquote> <strong>Заметка</strong> <br> Следите за пробелами. Конкатенация не добавляет пробелов между конкатенированными строками, поэтому вам нужно будет добавить их самостоятельно. </section>
<section id='description'>
В JavaScript, когда оператор <code>+</code> используется со значением <code>String</code> , он называется оператором <dfn>конкатенации</dfn> . Вы можете создать новую строку из других строк путем <dfn>конкатенации</dfn> их вместе. <strong>пример</strong> <blockquote> «Меня зовут Алан, +, я конкатенирую». </blockquote> <strong>Заметка</strong> <br> Следите за пробелами. Конкатенация не добавляет пробелов между конкатенированными строками, поэтому вам нужно будет добавить их самостоятельно.
</section>
## Instructions
<section id="instructions"> Создайте <code>myStr</code> из строк <code>&quot;This is the start. &quot;</code> и <code>&quot;This is the end.&quot;</code> используя оператор <code>+</code> . </section>
<section id='instructions'>
Создайте <code>myStr</code> из строк <code>&quot;This is the start. &quot;</code> и <code>&quot;This is the end.&quot;</code> используя оператор <code>+</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>myStr</code> должен иметь значение <code>This is the start. This is the end.</code>
testString: 'assert(myStr === "This is the start. This is the end.", "<code>myStr</code> should have a value of <code>This is the start. This is the end.</code>");'
- text: Используйте оператор <code>+</code> для создания <code>myStr</code>
testString: 'assert(code.match(/([""]).*([""])\s*\+\s*([""]).*([""])/g).length > 1, "Use the <code>+</code> operator to build <code>myStr</code>");'
- text: <code>myStr</code> должен быть создан с использованием ключевого слова <code>var</code> .
testString: 'assert(/var\s+myStr/.test(code), "<code>myStr</code> should be created using the <code>var</code> keyword.");'
- text: Обязательно присвойте результат переменной <code>myStr</code> .
testString: 'assert(/myStr\s*=/.test(code), "Make sure to assign the result to the <code>myStr</code> variable.");'
- text: <code>myStr</code> should have a value of <code>This is the start. This is the end.</code>
testString: assert(myStr === "This is the start. This is the end.");
- text: Use the <code>+</code> operator to build <code>myStr</code>
testString: assert(code.match(/(["']).*(["'])\s*\+\s*(["']).*(["'])/g).length > 1);
- text: <code>myStr</code> should be created using the <code>var</code> keyword.
testString: assert(/var\s+myStr/.test(code));
- text: Make sure to assign the result to the <code>myStr</code> variable.
testString: assert(/myStr\s*=/.test(code));
```
@@ -47,12 +52,18 @@ var myStr;
</div>
### After Test
### After Tests
<div id='js-teardown'>
```js
console.info('after the test');
(function(){
if(typeof myStr === 'string') {
return 'myStr = "' + myStr + '"';
} else {
return 'myStr is not a string';
}
})();
```
</div>
@@ -63,6 +74,8 @@ console.info('after the test');
<section id='solution'>
```js
// solution required
var ourStr = "I come first. " + "I come second.";
var myStr = "This is the start. " + "This is the end.";
```
</section>

View File

@@ -2,25 +2,30 @@
id: 56533eb9ac21ba0edf2244b8
title: Concatenating Strings with the Plus Equals Operator
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/cbQmmC4
forumTopicId: 16803
localeTitle: Объединение строк с помощью оператора Plus Equals
---
## Description
<section id="description"> Мы также можем использовать оператор <code>+=</code> для <dfn>конкатенации</dfn> строки в конец существующей строковой переменной. Это может быть очень полезно для разбиения длинной строки на несколько строк. <strong>Заметка</strong> <br> Следите за пробелами. Конкатенация не добавляет пробелов между конкатенированными строками, поэтому вам нужно будет добавить их самостоятельно. </section>
<section id='description'>
Мы также можем использовать оператор <code>+=</code> для <dfn>конкатенации</dfn> строки в конец существующей строковой переменной. Это может быть очень полезно для разбиения длинной строки на несколько строк. <strong>Заметка</strong> <br> Следите за пробелами. Конкатенация не добавляет пробелов между конкатенированными строками, поэтому вам нужно будет добавить их самостоятельно.
</section>
## Instructions
<section id="instructions"> Постройте <code>myStr</code> в нескольких строках, <code>myStr</code> эти две строки: <code>&quot;This is the first sentence. &quot;</code> и <code>&quot;This is the second sentence.&quot;</code> используя оператор <code>+=</code> . Используйте оператор <code>+=</code> аналогичный тому, как он отображается в редакторе. Начните с назначения первой строки <code>myStr</code> , затем добавьте вторую строку. </section>
<section id='instructions'>
Постройте <code>myStr</code> в нескольких строках, <code>myStr</code> эти две строки: <code>&quot;This is the first sentence. &quot;</code> и <code>&quot;This is the second sentence.&quot;</code> используя оператор <code>+=</code> . Используйте оператор <code>+=</code> аналогичный тому, как он отображается в редакторе. Начните с назначения первой строки <code>myStr</code> , затем добавьте вторую строку.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>myStr</code> должно иметь значение <code>This is the first sentence. This is the second sentence.</code>
testString: 'assert(myStr === "This is the first sentence. This is the second sentence.", "<code>myStr</code> should have a value of <code>This is the first sentence. This is the second sentence.</code>");'
- text: Используйте оператор <code>+=</code> для создания <code>myStr</code>
testString: 'assert(code.match(/\w\s*\+=\s*[""]/g).length > 1 && code.match(/\w\s*\=\s*[""]/g).length > 1, "Use the <code>+=</code> operator to build <code>myStr</code>");'
- text: <code>myStr</code> should have a value of <code>This is the first sentence. This is the second sentence.</code>
testString: assert(myStr === "This is the first sentence. This is the second sentence.");
- text: Use the <code>+=</code> operator to build <code>myStr</code>
testString: assert(code.match(/\w\s*\+=\s*["']/g).length > 1 && code.match(/\w\s*\=\s*["']/g).length > 1);
```
@@ -44,12 +49,18 @@ var myStr;
</div>
### After Test
### After Tests
<div id='js-teardown'>
```js
console.info('after the test');
(function(){
if(typeof myStr === 'string') {
return 'myStr = "' + myStr + '"';
} else {
return 'myStr is not a string';
}
})();
```
</div>
@@ -60,6 +71,11 @@ console.info('after the test');
<section id='solution'>
```js
// solution required
var ourStr = "I come first. ";
ourStr += "I come second.";
var myStr = "This is the first sentence. ";
myStr += "This is the second sentence.";
```
</section>

View File

@@ -2,25 +2,30 @@
id: 56533eb9ac21ba0edf2244b9
title: Constructing Strings with Variables
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/cqk8rf4
forumTopicId: 16805
localeTitle: Построение строк с переменными
---
## Description
<section id="description"> Иногда вам нужно будет создать строку, стиль <a href="https://en.wikipedia.org/wiki/Mad_Libs" target="_blank">Mad Libs</a> . Используя оператор конкатенации ( <code>+</code> ), вы можете вставить одну или несколько переменных в строку, которую вы строите. </section>
<section id='description'>
Иногда вам нужно будет создать строку, стиль <a href="https://en.wikipedia.org/wiki/Mad_Libs" target="_blank">Mad Libs</a> . Используя оператор конкатенации ( <code>+</code> ), вы можете вставить одну или несколько переменных в строку, которую вы строите.
</section>
## Instructions
<section id="instructions"> Установите <code>myName</code> в строку, равную вашему имени, и создайте <code>myStr</code> с <code>myName</code> между строками <code>&quot;My name is &quot;</code> и <code>&quot; and I am well!&quot;</code> </section>
<section id='instructions'>
Установите <code>myName</code> в строку, равную вашему имени, и создайте <code>myStr</code> с <code>myName</code> между строками <code>&quot;My name is &quot;</code> и <code>&quot; and I am well!&quot;</code>
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>myName</code> должен быть установлен в строку длиной не менее 3 символов
testString: 'assert(typeof myName !== "undefined" && myName.length > 2, "<code>myName</code> should be set to a string at least 3 characters long");'
- text: Используйте два <code>+</code> оператора для сборки <code>myStr</code> с <code>myName</code> внутри него
testString: 'assert(code.match(/[""]\s*\+\s*myName\s*\+\s*[""]/g).length > 0, "Use two <code>+</code> operators to build <code>myStr</code> with <code>myName</code> inside it");'
- text: <code>myName</code> should be set to a string at least 3 characters long
testString: assert(typeof myName !== 'undefined' && myName.length > 2);
- text: Use two <code>+</code> operators to build <code>myStr</code> with <code>myName</code> inside it
testString: assert(code.match(/["']\s*\+\s*myName\s*\+\s*["']/g).length > 0);
```
@@ -44,12 +49,25 @@ var myStr;
</div>
### After Test
### After Tests
<div id='js-teardown'>
```js
console.info('after the test');
(function(){
var output = [];
if(typeof myName === 'string') {
output.push('myName = "' + myName + '"');
} else {
output.push('myName is not a string');
}
if(typeof myStr === 'string') {
output.push('myStr = "' + myStr + '"');
} else {
output.push('myStr is not a string');
}
return output.join('\n');
})();
```
</div>
@@ -60,6 +78,8 @@ console.info('after the test');
<section id='solution'>
```js
// solution required
var myName = "Bob";
var myStr = "My name is " + myName + " and I am well!";
```
</section>

View File

@@ -2,27 +2,32 @@
id: 56105e7b514f539506016a5e
title: Count Backwards With a For Loop
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/c2R6BHa
forumTopicId: 16808
localeTitle: Count Backwards с помощью цикла
---
## Description
<section id="description"> Цикл for также может рассчитывать назад, пока мы можем определить правильные условия. Для того, чтобы пересчитать назад два раза, нам нужно изменить нашу <code>initialization</code> , <code>condition</code> и <code>final-expression</code> . Мы начнем с <code>i = 10</code> и цикл, пока <code>i &gt; 0</code> . Мы будем уменьшать <code>i</code> на 2 каждый цикл с <code>i -= 2</code> . <blockquote> var ourArray = []; <br> для (var i = 10; i&gt; 0; i- = 2) { <br> ourArray.push (я); <br> } </blockquote> <code>ourArray</code> будет содержать <code>[10,8,6,4,2]</code> . Давайте изменим нашу <code>initialization</code> и <code>final-expression</code> чтобы мы могли рассчитывать назад на два по нечетным числам. </section>
<section id='description'>
Цикл for также может рассчитывать назад, пока мы можем определить правильные условия. Для того, чтобы пересчитать назад два раза, нам нужно изменить нашу <code>initialization</code> , <code>condition</code> и <code>final-expression</code> . Мы начнем с <code>i = 10</code> и цикл, пока <code>i &gt; 0</code> . Мы будем уменьшать <code>i</code> на 2 каждый цикл с <code>i -= 2</code> . <blockquote> var ourArray = []; <br> для (var i = 10; i&gt; 0; i- = 2) { <br> ourArray.push (я); <br> } </blockquote> <code>ourArray</code> будет содержать <code>[10,8,6,4,2]</code> . Давайте изменим нашу <code>initialization</code> и <code>final-expression</code> чтобы мы могли рассчитывать назад на два по нечетным числам.
</section>
## Instructions
<section id="instructions"> Нажимайте нечетные числа от 9 до 1 в <code>myArray</code> используя цикл <code>for</code> . </section>
<section id='instructions'>
Нажимайте нечетные числа от 9 до 1 в <code>myArray</code> используя цикл <code>for</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: Вы должны использовать <code>for</code> петли для этого.
testString: 'assert(code.match(/for\s*\(/g).length > 1, "You should be using a <code>for</code> loop for this.");'
- text: Вы должны использовать метод массива <code>push</code> .
testString: 'assert(code.match(/myArray.push/), "You should be using the array method <code>push</code>.");'
- text: '<code>myArray</code> должен быть равен <code>[9,7,5,3,1]</code> .'
testString: 'assert.deepEqual(myArray, [9,7,5,3,1], "<code>myArray</code> should equal <code>[9,7,5,3,1]</code>.");'
- text: You should be using a <code>for</code> loop for this.
testString: assert(code.match(/for\s*\(/g).length > 1);
- text: You should be using the array method <code>push</code>.
testString: assert(code.match(/myArray.push/));
- text: <code>myArray</code> should equal <code>[9,7,5,3,1]</code>.
testString: assert.deepEqual(myArray, [9,7,5,3,1]);
```
@@ -50,12 +55,12 @@ var myArray = [];
</div>
### After Test
### After Tests
<div id='js-teardown'>
```js
console.info('after the test');
if(typeof myArray !== "undefined"){(function(){return myArray;})();}
```
</div>
@@ -66,6 +71,14 @@ console.info('after the test');
<section id='solution'>
```js
// solution required
var ourArray = [];
for (var i = 10; i > 0; i -= 2) {
ourArray.push(i);
}
var myArray = [];
for (var i = 9; i > 0; i -= 2) {
myArray.push(i);
}
```
</section>

View File

@@ -2,15 +2,19 @@
id: 565bbe00e9cc8ac0725390f4
title: Counting Cards
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/c6KE7ty
forumTopicId: 16809
localeTitle: Считаем карты
---
## Description
<section id="description"> В игре Blackjack в казино игрок может получить преимущество над домом, отслеживая относительное количество высоких и низких карт, оставшихся в колоде. Это называется <a href="https://en.wikipedia.org/wiki/Card_counting" target="_blank">подсчет карт</a> . Наличие более высоких карт, оставшихся в колоде, способствует игроку. Каждой карте присваивается значение в соответствии с приведенной ниже таблицей. Когда счет положителен, игрок должен делать ставки на высокий уровень. Когда счетчик равен нулю или отрицателен, игрок должен делать ставки на низком уровне. <table class="table table-striped"><thead><tr><th> Изменить счет </th><th> Карты </th></tr></thead><tbody><tr><td> +1 </td><td> 2, 3, 4, 5, 6 </td></tr><tr><td> 0 </td><td> 7, 8, 9 </td></tr><tr><td> -1 </td><td> 10, &#39;J&#39;, &#39;Q&#39;, &#39;K&#39;, &#39;A&#39; </td></tr></tbody></table> Вы будете писать функцию подсчета карт. Он получит параметр <code>card</code> , который может быть числом или строкой, и увеличивать или уменьшать глобальную переменную <code>count</code> в соответствии с значением карты (см. Таблицу). Затем функция вернет строку с текущим счетчиком и строкой <code>Bet</code> если счетчик положителен, или <code>Hold</code> если счетчик равен нулю или отрицателен. Текущий счетчик и решение игрока ( <code>Bet</code> или <code>Hold</code> ) должны быть разделены одним пробелом. <strong>Пример вывода</strong> <br> <code>-3 Hold</code> <br> <code>5 Bet</code> <strong>подсказок</strong> <code>5 Bet</code> <br> НЕ сбрасывайте <code>count</code> до 0, когда значение равно 7, 8 или 9. <br> НЕ возвращать массив. <br> НЕ включайте в выход кавычки (одиночные или двойные). </section>
<section id='description'>
В игре Blackjack в казино игрок может получить преимущество над домом, отслеживая относительное количество высоких и низких карт, оставшихся в колоде. Это называется <a href="https://en.wikipedia.org/wiki/Card_counting" target="_blank">подсчет карт</a> . Наличие более высоких карт, оставшихся в колоде, способствует игроку. Каждой карте присваивается значение в соответствии с приведенной ниже таблицей. Когда счет положителен, игрок должен делать ставки на высокий уровень. Когда счетчик равен нулю или отрицателен, игрок должен делать ставки на низком уровне. <table class="table table-striped"><thead><tr><th> Изменить счет </th><th> Карты </th></tr></thead><tbody><tr><td> +1 </td><td> 2, 3, 4, 5, 6 </td></tr><tr><td> 0 </td><td> 7, 8, 9 </td></tr><tr><td> -1 </td><td> 10, &#39;J&#39;, &#39;Q&#39;, &#39;K&#39;, &#39;A&#39; </td></tr></tbody></table> Вы будете писать функцию подсчета карт. Он получит параметр <code>card</code> , который может быть числом или строкой, и увеличивать или уменьшать глобальную переменную <code>count</code> в соответствии с значением карты (см. Таблицу). Затем функция вернет строку с текущим счетчиком и строкой <code>Bet</code> если счетчик положителен, или <code>Hold</code> если счетчик равен нулю или отрицателен. Текущий счетчик и решение игрока ( <code>Bet</code> или <code>Hold</code> ) должны быть разделены одним пробелом. <strong>Пример вывода</strong> <br> <code>-3 Hold</code> <br> <code>5 Bet</code> <strong>подсказок</strong> <code>5 Bet</code> <br> НЕ сбрасывайте <code>count</code> до 0, когда значение равно 7, 8 или 9. <br> НЕ возвращать массив. <br> НЕ включайте в выход кавычки (одиночные или двойные).
</section>
## Instructions
<section id="instructions">
<section id='instructions'>
</section>
## Tests
@@ -18,20 +22,20 @@ localeTitle: Считаем карты
```yml
tests:
- text: 'Последовательность карт 2, 3, 4, 5, 6 должна вернуть <code>5 Bet</code>'
testString: 'assert((function(){ count = 0; cc(2);cc(3);cc(4);cc(5);var out = cc(6); if(out === "5 Bet") {return true;} return false; })(), "Cards Sequence 2, 3, 4, 5, 6 should return <code>5 Bet</code>");'
- text: 'Последовательность карт 7, 8, 9 должна возвращаться <code>0 Hold</code>'
testString: 'assert((function(){ count = 0; cc(7);cc(8);var out = cc(9); if(out === "0 Hold") {return true;} return false; })(), "Cards Sequence 7, 8, 9 should return <code>0 Hold</code>");'
- text: 'Последовательность карточек 10, J, Q, K, A должна возвращать <code>-5 Hold</code>'
testString: 'assert((function(){ count = 0; cc(10);cc("J");cc("Q");cc("K");var out = cc("A"); if(out === "-5 Hold") {return true;} return false; })(), "Cards Sequence 10, J, Q, K, A should return <code>-5 Hold</code>");'
- text: 'Последовательность карт 3, 7, Q, 8, A должна возвращать <code>-1 Hold</code>'
testString: 'assert((function(){ count = 0; cc(3);cc(7);cc("Q");cc(8);var out = cc("A"); if(out === "-1 Hold") {return true;} return false; })(), "Cards Sequence 3, 7, Q, 8, A should return <code>-1 Hold</code>");'
- text: 'Последовательность карт 2, J, 9, 2, 7 должна вернуть <code>1 Bet</code>'
testString: 'assert((function(){ count = 0; cc(2);cc("J");cc(9);cc(2);var out = cc(7); if(out === "1 Bet") {return true;} return false; })(), "Cards Sequence 2, J, 9, 2, 7 should return <code>1 Bet</code>");'
- text: 'Последовательность карт 2, 2, 10 должна вернуть <code>1 Bet</code>'
testString: 'assert((function(){ count = 0; cc(2);cc(2);var out = cc(10); if(out === "1 Bet") {return true;} return false; })(), "Cards Sequence 2, 2, 10 should return <code>1 Bet</code>");'
- text: 'Последовательность карт 3, 2, A, 10, K должна возвращать <code>-1 Hold</code>'
testString: 'assert((function(){ count = 0; cc(3);cc(2);cc("A");cc(10);var out = cc("K"); if(out === "-1 Hold") {return true;} return false; })(), "Cards Sequence 3, 2, A, 10, K should return <code>-1 Hold</code>");'
- text: Cards Sequence 2, 3, 4, 5, 6 should return <code>5 Bet</code>
testString: assert((function(){ count = 0; cc(2);cc(3);cc(4);cc(5);var out = cc(6); if(out === "5 Bet") {return true;} return false; })());
- text: Cards Sequence 7, 8, 9 should return <code>0 Hold</code>
testString: assert((function(){ count = 0; cc(7);cc(8);var out = cc(9); if(out === "0 Hold") {return true;} return false; })());
- text: Cards Sequence 10, J, Q, K, A should return <code>-5 Hold</code>
testString: assert((function(){ count = 0; cc(10);cc('J');cc('Q');cc('K');var out = cc('A'); if(out === "-5 Hold") {return true;} return false; })());
- text: Cards Sequence 3, 7, Q, 8, A should return <code>-1 Hold</code>
testString: assert((function(){ count = 0; cc(3);cc(7);cc('Q');cc(8);var out = cc('A'); if(out === "-1 Hold") {return true;} return false; })());
- text: Cards Sequence 2, J, 9, 2, 7 should return <code>1 Bet</code>
testString: assert((function(){ count = 0; cc(2);cc('J');cc(9);cc(2);var out = cc(7); if(out === "1 Bet") {return true;} return false; })());
- text: Cards Sequence 2, 2, 10 should return <code>1 Bet</code>
testString: assert((function(){ count = 0; cc(2);cc(2);var out = cc(10); if(out === "1 Bet") {return true;} return false; })());
- text: Cards Sequence 3, 2, A, 10, K should return <code>-1 Hold</code>
testString: assert((function(){ count = 0; cc(3);cc(2);cc('A');cc(10);var out = cc('K'); if(out === "-1 Hold") {return true;} return false; })());
```
@@ -61,14 +65,35 @@ cc(2); cc(3); cc(7); cc('K'); cc('A');
</div>
</section>
## Solution
<section id='solution'>
```js
// solution required
var count = 0;
function cc(card) {
switch(card) {
case 2:
case 3:
case 4:
case 5:
case 6:
count++;
break;
case 10:
case 'J':
case 'Q':
case 'K':
case 'A':
count--;
}
if(count > 0) {
return count + " Bet";
} else {
return count + " Hold";
}
}
```
</section>

View File

@@ -2,25 +2,30 @@
id: cf1391c1c11feddfaeb4bdef
title: Create Decimal Numbers with JavaScript
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/ca8GEuW
forumTopicId: 16826
localeTitle: Создание десятичных чисел с помощью JavaScript
---
## Description
<section id="description"> Мы также можем хранить десятичные числа в переменных. Десятичные числа иногда называются <dfn>числами с плавающей запятой</dfn> или <dfn>поплавками</dfn> . <strong>Заметка</strong> <br> Не все реальные числа могут быть точно представлены в <dfn>плавающей точке</dfn> . Это может привести к ошибкам округления. <a href="https://en.wikipedia.org/wiki/Floating_point#Accuracy_problems" target="_blank">Подробности здесь</a> . </section>
<section id='description'>
Мы также можем хранить десятичные числа в переменных. Десятичные числа иногда называются <dfn>числами с плавающей запятой</dfn> или <dfn>поплавками</dfn> . <strong>Заметка</strong> <br> Не все реальные числа могут быть точно представлены в <dfn>плавающей точке</dfn> . Это может привести к ошибкам округления. <a href="https://en.wikipedia.org/wiki/Floating_point#Accuracy_problems" target="_blank">Подробности здесь</a> .
</section>
## Instructions
<section id="instructions"> Создайте переменную <code>myDecimal</code> и дайте ей десятичное значение с дробной частью (например, <code>5.7</code> ). </section>
<section id='instructions'>
Создайте переменную <code>myDecimal</code> и дайте ей десятичное значение с дробной частью (например, <code>5.7</code> ).
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>myDecimal</code> должен быть числом.
testString: 'assert(typeof myDecimal === "number", "<code>myDecimal</code> should be a number.");'
- text: <code>myDecimal</code> должен иметь десятичную точку
testString: 'assert(myDecimal % 1 != 0, "<code>myDecimal</code> should have a decimal point"); '
- text: <code>myDecimal</code> should be a number.
testString: assert(typeof myDecimal === "number");
- text: <code>myDecimal</code> should have a decimal point
testString: assert(myDecimal % 1 != 0);
```
@@ -40,12 +45,12 @@ var ourDecimal = 5.7;
</div>
### After Test
### After Tests
<div id='js-teardown'>
```js
console.info('after the test');
(function(){if(typeof myDecimal !== "undefined"){return myDecimal;}})();
```
</div>
@@ -56,6 +61,7 @@ console.info('after the test');
<section id='solution'>
```js
// solution required
var myDecimal = 9.9;
```
</section>

View File

@@ -2,23 +2,28 @@
id: bd7123c9c443eddfaeb5bdef
title: Declare JavaScript Variables
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/cNanrHq
forumTopicId: 17556
localeTitle: Объявление переменных JavaScript
---
## Description
<section id="description"> В информатике <dfn>данные</dfn> - это все, что имеет значение для компьютера. JavaScript предоставляет семь разных <dfn>типов данных,</dfn>, а именно: <code>undefined</code> , <code>null</code> , <code>boolean</code> , <code>string</code> , <code>symbol</code> , <code>number</code> и <code>object</code> . Например, компьютеры различают числа, такие как число <code>12</code> и <code>strings</code> (строки), такие как <code>&quot;12&quot;</code> , <code>&quot;dog&quot;</code> или <code>&quot;123 cats&quot;</code> , которые представляют собой собрание символов. Компьютеры могут выполнять математические операции над числами, но не над строками. <dfn>Переменные</dfn> позволяют компьютерам динамически хранить и манипулировать данными. Они делают это, используя «метку», которая указывает на данные, а не используя сами данные. Любой из семи типов данных может быть сохранен в переменной. <code>Variables</code> аналогичны переменным x и y, которые используются в математике, что означает, что они просто имя для представления данных, к которым мы хотим обратиться. Компьютерные <code>variables</code> отличаются от математических переменных тем, что они могут хранить разные значения в разное время. Мы говорим JavaScript создать или <dfn>объявить</dfn> переменную, поставив перед ней ключевое слово <code>var</code> , например: <blockquote> var ourName; </blockquote> создает <code>variable</code> с именем <code>ourName</code> . В JavaScript мы заканчиваем выражения точкой с запятой. Имена <code>Variable</code> могут состоять из чисел, букв и <code>$</code> или <code>_</code> , но могут не содержать пробелов или начинаться с числа. </section>
<section id='description'>
В информатике <dfn>данные</dfn> - это все, что имеет значение для компьютера. JavaScript предоставляет семь разных <dfn>типов данных,</dfn>, а именно: <code>undefined</code> , <code>null</code> , <code>boolean</code> , <code>string</code> , <code>symbol</code> , <code>number</code> и <code>object</code> . Например, компьютеры различают числа, такие как число <code>12</code> и <code>strings</code> (строки), такие как <code>&quot;12&quot;</code> , <code>&quot;dog&quot;</code> или <code>&quot;123 cats&quot;</code> , которые представляют собой собрание символов. Компьютеры могут выполнять математические операции над числами, но не над строками. <dfn>Переменные</dfn> позволяют компьютерам динамически хранить и манипулировать данными. Они делают это, используя «метку», которая указывает на данные, а не используя сами данные. Любой из семи типов данных может быть сохранен в переменной. <code>Variables</code> аналогичны переменным x и y, которые используются в математике, что означает, что они просто имя для представления данных, к которым мы хотим обратиться. Компьютерные <code>variables</code> отличаются от математических переменных тем, что они могут хранить разные значения в разное время. Мы говорим JavaScript создать или <dfn>объявить</dfn> переменную, поставив перед ней ключевое слово <code>var</code> , например: <blockquote> var ourName; </blockquote> создает <code>variable</code> с именем <code>ourName</code> . В JavaScript мы заканчиваем выражения точкой с запятой. Имена <code>Variable</code> могут состоять из чисел, букв и <code>$</code> или <code>_</code> , но могут не содержать пробелов или начинаться с числа.
</section>
## Instructions
<section id="instructions"> Используйте ключевое слово <code>var</code> для создания переменной <code>myName</code> . <strong>Подсказка</strong> <br> Посмотрите на пример <code>ourName</code> если вы застряли. </section>
<section id='instructions'>
Используйте ключевое слово <code>var</code> для создания переменной <code>myName</code> . <strong>Подсказка</strong> <br> Посмотрите на пример <code>ourName</code> если вы застряли.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: 'Вы должны объявить <code>myName</code> с ключевым словом <code>var</code> , заканчивающимся точкой с запятой'
testString: 'assert(/var\s+myName\s*;/.test(code), "You should declare <code>myName</code> with the <code>var</code> keyword, ending with a semicolon");'
- text: You should declare <code>myName</code> with the <code>var</code> keyword, ending with a semicolon
testString: assert(/var\s+myName\s*;/.test(code));
```
@@ -39,12 +44,12 @@ var ourName;
</div>
### After Test
### After Tests
<div id='js-teardown'>
```js
console.info('after the test');
if(typeof myName !== "undefined"){(function(v){return v;})(myName);}
```
</div>
@@ -55,6 +60,7 @@ console.info('after the test');
<section id='solution'>
```js
// solution required
var myName;
```
</section>

View File

@@ -2,25 +2,30 @@
id: bd7123c9c444eddfaeb5bdef
title: Declare String Variables
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/c2QvWU6
forumTopicId: 17557
localeTitle: Объявлять строковые переменные
---
## Description
<section id="description"> Раньше мы использовали код <code>var myName = &quot;your name&quot;;</code> <code>&quot;your name&quot;</code> называется <dfn>строковым</dfn> <dfn>литералом</dfn> . Это строка, потому что это серия из нуля или более символов, заключенных в одинарные или двойные кавычки. </section>
<section id='description'>
Раньше мы использовали код <code>var myName = &quot;your name&quot;;</code> <code>&quot;your name&quot;</code> называется <dfn>строковым</dfn> <dfn>литералом</dfn> . Это строка, потому что это серия из нуля или более символов, заключенных в одинарные или двойные кавычки.
</section>
## Instructions
<section id="instructions"> Создайте две новые <code>string</code> переменные: <code>myFirstName</code> и <code>myLastName</code> и присвойте им значения вашего первого и последнего имени, соответственно. </section>
<section id='instructions'>
Создайте две новые <code>string</code> переменные: <code>myFirstName</code> и <code>myLastName</code> и присвойте им значения вашего первого и последнего имени, соответственно.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>myFirstName</code> должно быть строкой с хотя бы одним символом.
testString: 'assert((function(){if(typeof myFirstName !== "undefined" && typeof myFirstName === "string" && myFirstName.length > 0){return true;}else{return false;}})(), "<code>myFirstName</code> should be a string with at least one character in it.");'
- text: <code>myLastName</code> должно быть строкой с хотя бы одним символом.
testString: 'assert((function(){if(typeof myLastName !== "undefined" && typeof myLastName === "string" && myLastName.length > 0){return true;}else{return false;}})(), "<code>myLastName</code> should be a string with at least one character in it.");'
- text: <code>myFirstName</code> should be a string with at least one character in it.
testString: assert((function(){if(typeof myFirstName !== "undefined" && typeof myFirstName === "string" && myFirstName.length > 0){return true;}else{return false;}})());
- text: <code>myLastName</code> should be a string with at least one character in it.
testString: assert((function(){if(typeof myLastName !== "undefined" && typeof myLastName === "string" && myLastName.length > 0){return true;}else{return false;}})());
```
@@ -42,12 +47,12 @@ var lastName = "Turing";
</div>
### After Test
### After Tests
<div id='js-teardown'>
```js
console.info('after the test');
if(typeof myFirstName !== "undefined" && typeof myLastName !== "undefined"){(function(){return myFirstName + ', ' + myLastName;})();}
```
</div>
@@ -58,6 +63,8 @@ console.info('after the test');
<section id='solution'>
```js
// solution required
var myFirstName = "Alan";
var myLastName = "Turing";
```
</section>

View File

@@ -2,29 +2,34 @@
id: 56533eb9ac21ba0edf2244ad
title: Decrement a Number with JavaScript
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/cM2KeS2
forumTopicId: 17558
localeTitle: Уменьшить число с помощью JavaScript
---
## Description
<section id="description"> Вы можете легко <dfn>уменьшать</dfn> или уменьшить переменную на один с <code>--</code> оператором. <code>i--;</code> эквивалентно <code>i = i - 1;</code> <strong>Заметка</strong> <br> Вся строка становится <code>i--;</code> , устраняя необходимость равенства знака. </section>
<section id='description'>
Вы можете легко <dfn>уменьшать</dfn> или уменьшить переменную на один с <code>--</code> оператором. <code>i--;</code> эквивалентно <code>i = i - 1;</code> <strong>Заметка</strong> <br> Вся строка становится <code>i--;</code> , устраняя необходимость равенства знака.
</section>
## Instructions
<section id="instructions"> Измените код на использование оператора <code>--</code> на <code>myVar</code> . </section>
<section id='instructions'>
Измените код на использование оператора <code>--</code> на <code>myVar</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>myVar</code> должен равняться <code>10</code>
testString: 'assert(myVar === 10, "<code>myVar</code> should equal <code>10</code>");'
- text: <code>myVar = myVar - 1;</code> следует изменить
testString: 'assert(/var\s*myVar\s*=\s*11;\s*\/*.*\s*([-]{2}\s*myVar|myVar\s*[-]{2});/.test(code), "<code>myVar = myVar - 1;</code> should be changed");'
- text: Используйте <code>--</code> оператор на <code>myVar</code>
testString: 'assert(/[-]{2}\s*myVar|myVar\s*[-]{2}/.test(code), "Use the <code>--</code> operator on <code>myVar</code>");'
- text: Не меняйте код над строкой
testString: 'assert(/var myVar = 11;/.test(code), "Do not change code above the line");'
- text: <code>myVar</code> should equal <code>10</code>
testString: assert(myVar === 10);
- text: <code>myVar = myVar - 1;</code> should be changed
testString: assert(/var\s*myVar\s*=\s*11;\s*\/*.*\s*([-]{2}\s*myVar|myVar\s*[-]{2});/.test(code));
- text: Use the <code>--</code> operator on <code>myVar</code>
testString: assert(/[-]{2}\s*myVar|myVar\s*[-]{2}/.test(code));
- text: Do not change code above the line
testString: assert(/var myVar = 11;/.test(code));
```
@@ -45,12 +50,12 @@ myVar = myVar - 1;
</div>
### After Test
### After Tests
<div id='js-teardown'>
```js
console.info('after the test');
(function(z){return 'myVar = ' + z;})(myVar);
```
</div>
@@ -61,6 +66,8 @@ console.info('after the test');
<section id='solution'>
```js
// solution required
var myVar = 11;
myVar--;
```
</section>

View File

@@ -2,25 +2,30 @@
id: 56bbb991ad1ed5201cd392d3
title: Delete Properties from a JavaScript Object
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/cDqKdTv
forumTopicId: 17560
localeTitle: Удаление свойств из объекта JavaScript
---
## Description
<section id="description"> Мы также можем удалить свойства из таких объектов: <code>delete ourDog.bark;</code> </section>
<section id='description'>
Мы также можем удалить свойства из таких объектов: <code>delete ourDog.bark;</code>
</section>
## Instructions
<section id="instructions"> Удалите свойство <code>&quot;tails&quot;</code> из <code>myDog</code> . Вы можете использовать либо точечную, либо скобку. </section>
<section id='instructions'>
Удалите свойство <code>&quot;tails&quot;</code> из <code>myDog</code> . Вы можете использовать либо точечную, либо скобку.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: Удалите свойство <code>&quot;tails&quot;</code> из <code>myDog</code> .
testString: 'assert(typeof myDog === "object" && myDog.tails === undefined, "Delete the property <code>"tails"</code> from <code>myDog</code>.");'
- text: Не изменяйте настройку <code>myDog</code>
testString: 'assert(code.match(/"tails": 1/g).length > 1, "Do not modify the <code>myDog</code> setup");'
- text: Delete the property <code>"tails"</code> from <code>myDog</code>.
testString: assert(typeof myDog === "object" && myDog.tails === undefined);
- text: Do not modify the <code>myDog</code> setup
testString: 'assert(code.match(/"tails": 1/g).length > 1);'
```
@@ -58,12 +63,12 @@ var myDog = {
</div>
### After Test
### After Tests
<div id='js-teardown'>
```js
console.info('after the test');
(function(z){return z;})(myDog);
```
</div>
@@ -74,6 +79,21 @@ console.info('after the test');
<section id='solution'>
```js
// solution required
var ourDog = {
"name": "Camper",
"legs": 4,
"tails": 1,
"friends": ["everything!"],
"bark": "bow-wow"
};
var myDog = {
"name": "Happy Coder",
"legs": 4,
"tails": 1,
"friends": ["freeCodeCamp Campers"],
"bark": "woof"
};
delete myDog.tails;
```
</section>

View File

@@ -2,27 +2,32 @@
id: bd7993c9ca9feddfaeb7bdef
title: Divide One Decimal by Another with JavaScript
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/cBZe9AW
forumTopicId: 18255
localeTitle: Разделить одно десятичное на другое с помощью JavaScript
---
## Description
<section id="description"> Теперь давайте разделим одно десятичное на другое. </section>
<section id='description'>
Теперь давайте разделим одно десятичное на другое.
</section>
## Instructions
<section id="instructions"> Измените <code>0.0</code> так, чтобы <code>quotient</code> равен <code>2.2</code> . </section>
<section id='instructions'>
Измените <code>0.0</code> так, чтобы <code>quotient</code> равен <code>2.2</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: Переменный <code>quotient</code> должен равняться <code>2.2</code>
testString: 'assert(quotient === 2.2, "The variable <code>quotient</code> should equal <code>2.2</code>");'
- text: Вы должны использовать оператор <code>/</code> для разделения 4.4 на 2
testString: 'assert(/4\.40*\s*\/\s*2\.*0*/.test(code), "You should use the <code>/</code> operator to divide 4.4 by 2");'
- text: Значение переменной следует присваивать только один раз
testString: 'assert(code.match(/quotient/g).length === 1, "The quotient variable should only be assigned once");'
- text: The variable <code>quotient</code> should equal <code>2.2</code>
testString: assert(quotient === 2.2);
- text: You should use the <code>/</code> operator to divide 4.4 by 2
testString: assert(/4\.40*\s*\/\s*2\.*0*/.test(code));
- text: The quotient variable should only be assigned once
testString: assert(code.match(/quotient/g).length === 1);
```
@@ -40,12 +45,12 @@ var quotient = 0.0 / 2.0; // Fix this line
</div>
### After Test
### After Tests
<div id='js-teardown'>
```js
console.info('after the test');
(function(y){return 'quotient = '+y;})(quotient);
```
</div>
@@ -56,6 +61,7 @@ console.info('after the test');
<section id='solution'>
```js
// solution required
var quotient = 4.4 / 2.0;
```
</section>

View File

@@ -2,25 +2,30 @@
id: cf1111c1c11feddfaeb6bdef
title: Divide One Number by Another with JavaScript
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/cqkbdAr
forumTopicId: 17566
localeTitle: Разделите одно число другим с помощью JavaScript
---
## Description
<section id="description"> Мы также можем разделить одно число на другое. JavaScript использует символ <code>/</code> для деления. <p> <strong>пример</strong> </p><blockquote> myVar = 16/2; // присвоено 8 </blockquote></section>
<section id='description'>
Мы также можем разделить одно число на другое. JavaScript использует символ <code>/</code> для деления. <p> <strong>пример</strong> </p><blockquote> myVar = 16/2; // присвоено 8 </blockquote>
</section>
## Instructions
<section id="instructions"> Измените значение <code>0</code> так, чтобы <code>quotient</code> был равен <code>2</code> . </section>
<section id='instructions'>
Измените значение <code>0</code> так, чтобы <code>quotient</code> был равен <code>2</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: Сделайте переменное <code>quotient</code> равным 2.
testString: 'assert(quotient === 2, "Make the variable <code>quotient</code> equal to 2.");'
- text: Используйте оператор <code>/</code>
testString: 'assert(/\d+\s*\/\s*\d+/.test(code), "Use the <code>/</code> operator");'
- text: Make the variable <code>quotient</code> equal to 2.
testString: assert(quotient === 2);
- text: Use the <code>/</code> operator
testString: assert(/\d+\s*\/\s*\d+/.test(code));
```
@@ -38,12 +43,12 @@ var quotient = 66 / 0;
</div>
### After Test
### After Tests
<div id='js-teardown'>
```js
console.info('after the test');
(function(z){return 'quotient = '+z;})(quotient);
```
</div>
@@ -54,6 +59,7 @@ console.info('after the test');
<section id='solution'>
```js
// solution required
var quotient = 66 / 33;
```
</section>

View File

@@ -2,33 +2,40 @@
id: 56533eb9ac21ba0edf2244b6
title: Escape Sequences in Strings
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/cvmqRh6
forumTopicId: 17567
localeTitle: Последовательности выхода в строках
---
## Description
<section id="description"> Цитаты не являются единственными символами, которые могут быть <dfn>экранированы</dfn> внутри строки. Существует две причины использования экранирующих символов: во-первых, чтобы вы могли использовать символы, которые вы в противном случае не могли бы вывести, например, backspace. Во-вторых, вы можете представить несколько кавычек в строке без неправильного толкования JavaScript, что вы имеете в виду. Мы узнали об этом в предыдущей задаче. <table class="table table-striped"><thead><tr><th> Код </th><th> Вывод </th></tr></thead><tbody><tr><td> <code>\&#39;</code> </td> <td> одиночная цитата </td></tr><tr><td> <code>\&quot;</code> </td> <td> двойная цитата </td></tr><tr><td> <code>\\</code> </td> <td> обратный слэш </td></tr><tr><td> <code>\n</code> </td> <td> новая линия </td></tr><tr><td> <code>\r</code> </td> <td> возврат каретки </td></tr><tr><td> <code>\t</code> </td> <td> табуляция </td></tr><tr><td> <code>\b</code> </td> <td> возврат на одну позицию </td></tr><tr><td> <code>\f</code> </td> <td> форма подачи </td></tr></tbody></table> <em>Обратите внимание, что обратная косая черта должна быть экранирована, чтобы отображать ее как обратную косую черту.</em> </section>
<section id='description'>
Цитаты не являются единственными символами, которые могут быть <dfn>экранированы</dfn> внутри строки. Существует две причины использования экранирующих символов: во-первых, чтобы вы могли использовать символы, которые вы в противном случае не могли бы вывести, например, backspace. Во-вторых, вы можете представить несколько кавычек в строке без неправильного толкования JavaScript, что вы имеете в виду. Мы узнали об этом в предыдущей задаче. <table class="table table-striped"><thead><tr><th> Код </th><th> Вывод </th></tr></thead><tbody><tr><td> <code>\&#39;</code> </td> <td> одиночная цитата </td></tr><tr><td> <code>\&quot;</code> </td> <td> двойная цитата </td></tr><tr><td> <code>\\</code> </td> <td> обратный слэш </td></tr><tr><td> <code>\n</code> </td> <td> новая линия </td></tr><tr><td> <code>\r</code> </td> <td> возврат каретки </td></tr><tr><td> <code>\t</code> </td> <td> табуляция </td></tr><tr><td> <code>\b</code> </td> <td> возврат на одну позицию </td></tr><tr><td> <code>\f</code> </td> <td> форма подачи </td></tr></tbody></table> <em>Обратите внимание, что обратная косая черта должна быть экранирована, чтобы отображать ее как обратную косую черту.</em>
</section>
## Instructions
<section id="instructions"> Назначьте следующие три строки текста в единственную переменную <code>myStr</code> используя escape-последовательности. <blockquote> Первая линия <br> \Вторая линия <br> ThirdLine </blockquote> Для правильной вставки специальных символов вам необходимо использовать escape-последовательности. Вам также нужно будет следить за интервалом, как он выглядит выше, без пробелов между escape-последовательностями или словами. Вот текст с выведенными escape-последовательностями. <q>FirstLine <code>newline</code> <code>tab</code> <code>backslash</code> второй</q> линии <q><code>newline</code> ThirdLine</q> </section>
<section id='instructions'>
Назначьте следующие три строки текста в единственную переменную <code>myStr</code> используя escape-последовательности. <blockquote> Первая линия <br> \Вторая линия <br> ThirdLine </blockquote> Для правильной вставки специальных символов вам необходимо использовать escape-последовательности. Вам также нужно будет следить за интервалом, как он выглядит выше, без пробелов между escape-последовательностями или словами. Вот текст с выведенными escape-последовательностями. <q>FirstLine <code>newline</code> <code>tab</code> <code>backslash</code> второй</q> линии <q><code>newline</code> ThirdLine</q>
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>myStr</code> не должен содержать пробелов
testString: 'assert(!/ /.test(myStr), "<code>myStr</code> should not contain any spaces");'
- text: '<code>myStr</code> должен содержать строки <code>FirstLine</code> , <code>SecondLine</code> и <code>ThirdLine</code> (помните о чувствительности к регистру)'
testString: 'assert(/FirstLine/.test(myStr) && /SecondLine/.test(myStr) && /ThirdLine/.test(myStr), "<code>myStr</code> should contain the strings <code>FirstLine</code>, <code>SecondLine</code> and <code>ThirdLine</code> (remember case sensitivity)");'
- text: <code>FirstLine</code> должен следовать символ новой строки <code>\n</code>
testString: 'assert(/FirstLine\n/.test(myStr), "<code>FirstLine</code> should be followed by the newline character <code>\n</code>");'
- text: <code>myStr</code> должен содержать символ табуляции <code>\t</code> который следует за символом новой строки
testString: 'assert(/\n\t/.test(myStr), "<code>myStr</code> should contain a tab character <code>\t</code> which follows a newline character");'
- text: <code>SecondLine</code> должен предшествовать символ обратной косой черты <code>\\</code>
testString: 'assert(/\SecondLine/.test(myStr), "<code>SecondLine</code> should be preceded by the backslash character <code>\\</code>");'
- text: Должен быть символ новой строки между <code>SecondLine</code> и <code>ThirdLine</code>
testString: 'assert(/SecondLine\nThirdLine/.test(myStr), "There should be a newline character between <code>SecondLine</code> and <code>ThirdLine</code>");'
- text: <code>myStr</code> should not contain any spaces
testString: assert(!/ /.test(myStr));
- text: <code>myStr</code> should contain the strings <code>FirstLine</code>, <code>SecondLine</code> and <code>ThirdLine</code> (remember case sensitivity)
testString: assert(/FirstLine/.test(myStr) && /SecondLine/.test(myStr) && /ThirdLine/.test(myStr));
- text: <code>FirstLine</code> should be followed by the newline character <code>\n</code>
testString: assert(/FirstLine\n/.test(myStr));
- text: <code>myStr</code> should contain a tab character <code>\t</code> which follows a newline character
testString: assert(/\n\t/.test(myStr));
- text: <code>SecondLine</code> should be preceded by the backslash character <code>\</code>
testString: assert(/\\SecondLine/.test(myStr));
- text: There should be a newline character between <code>SecondLine</code> and <code>ThirdLine</code>
testString: assert(/SecondLine\nThirdLine/.test(myStr));
- text: <code>myStr</code> should only contain characters shown in the instructions
testString: assert(myStr === 'FirstLine\n\t\\SecondLine\nThirdLine');
```
@@ -46,12 +53,14 @@ var myStr; // Change this line
</div>
### After Test
### After Tests
<div id='js-teardown'>
```js
console.info('after the test');
(function(){
if (myStr !== undefined){
console.log('myStr:\n' + myStr);}})();
```
</div>
@@ -62,6 +71,7 @@ console.info('after the test');
<section id='solution'>
```js
// solution required
var myStr = "FirstLine\n\t\\SecondLine\nThirdLine";
```
</section>

View File

@@ -2,25 +2,30 @@
id: 56533eb9ac21ba0edf2244b5
title: Escaping Literal Quotes in Strings
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/c2QvgSr
forumTopicId: 17568
localeTitle: Исключение буквенных котировок в строках
---
## Description
<section id="description"> Когда вы определяете строку, вы должны начинать и заканчивать одиночную или двойную кавычку. Что происходит, когда вам нужна буквальная цитата: <code>&quot;</code> или <code>&#39;</code> внутри вашей строки? В JavaScript вы можете <dfn>избежать</dfn> цитаты, рассматривая ее как конец строки, помещая <dfn>обратную косую черту</dfn> ( <code>\</code> ) перед цитатой. <code>var sampleStr = &quot;Alan said, \&quot;Peter is learning JavaScript\&quot;.&quot;;</code> Это сигнализирует JavaScript, что следующая цитата не является концом строки, но должна появляться внутри строки. Поэтому, если вы должны были напечатать это на консоли, вы бы получили: <code>Alan said, &quot;Peter is learning JavaScript&quot;.</code> </section>
<section id='description'>
Когда вы определяете строку, вы должны начинать и заканчивать одиночную или двойную кавычку. Что происходит, когда вам нужна буквальная цитата: <code>&quot;</code> или <code>&#39;</code> внутри вашей строки? В JavaScript вы можете <dfn>избежать</dfn> цитаты, рассматривая ее как конец строки, помещая <dfn>обратную косую черту</dfn> ( <code>\</code> ) перед цитатой. <code>var sampleStr = &quot;Alan said, \&quot;Peter is learning JavaScript\&quot;.&quot;;</code> Это сигнализирует JavaScript, что следующая цитата не является концом строки, но должна появляться внутри строки. Поэтому, если вы должны были напечатать это на консоли, вы бы получили: <code>Alan said, &quot;Peter is learning JavaScript&quot;.</code>
</section>
## Instructions
<section id="instructions"> Используйте <dfn>обратную косую черту,</dfn> чтобы назначить строку переменной <code>myStr</code> чтобы, если вы должны были ее распечатать на консоль, вы увидите: « <code>I am a &quot;double quoted&quot; string inside &quot;double quotes&quot;.</code> </section>
<section id='instructions'>
Используйте <dfn>обратную косую черту,</dfn> чтобы назначить строку переменной <code>myStr</code> чтобы, если вы должны были ее распечатать на консоль, вы увидите: « <code>I am a &quot;double quoted&quot; string inside &quot;double quotes&quot;.</code>
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: Вы должны использовать две двойные кавычки ( <code>&quot;</code> ) и четыре сэкономленные двойные кавычки ( <code>\&quot;</code> ).
testString: 'assert(code.match(/\\"/g).length === 4 && code.match(/[^\\]"/g).length === 2, "You should use two double quotes (<code>&quot;</code>) and four escaped double quotes (<code>&#92;&quot;</code>).");'
- text: 'Переменная myStr должна содержать строку: <code>I am a &quot;double quoted&quot; string inside &quot;double quotes&quot;.</code>'
testString: 'assert(myStr === "I am a \"double quoted\" string inside \"double quotes\".", "Variable myStr should contain the string: <code>I am a "double quoted" string inside "double quotes".</code>");'
- text: You should use two double quotes (<code>&quot;</code>) and four escaped double quotes (<code>&#92;&quot;</code>).
testString: assert(code.match(/\\"/g).length === 4 && code.match(/[^\\]"/g).length === 2);
- text: 'Variable myStr should contain the string: <code>I am a "double quoted" string inside "double quotes".</code>'
testString: assert(myStr === "I am a \"double quoted\" string inside \"double quotes\".");
```
@@ -38,12 +43,18 @@ var myStr = ""; // Change this line
</div>
### After Test
### After Tests
<div id='js-teardown'>
```js
console.info('after the test');
(function(){
if(typeof myStr === 'string') {
console.log("myStr = \"" + myStr + "\"");
} else {
console.log("myStr is undefined");
}
})();
```
</div>
@@ -54,6 +65,7 @@ console.info('after the test');
<section id='solution'>
```js
// solution required
var myStr = "I am a \"double quoted\" string inside \"double quotes\".";
```
</section>

View File

@@ -2,25 +2,32 @@
id: bd7123c9c448eddfaeb5bdef
title: Find the Length of a String
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/cvmqEAd
forumTopicId: 18182
localeTitle: Найти длину строки
---
## Description
<section id="description"> Вы можете найти длину значения <code>String</code> , написав <code>.length</code> после строковой переменной или строкового литерала. <code>&quot;Alan Peter&quot;.length; // 10</code> Например, если мы создали переменную <code>var firstName = &quot;Charles&quot;</code> , мы могли бы узнать, как долго строка <code>&quot;Charles&quot;</code> используется с использованием свойства <code>firstName.length</code> . </section>
<section id='description'>
Вы можете найти длину значения <code>String</code> , написав <code>.length</code> после строковой переменной или строкового литерала. <code>&quot;Alan Peter&quot;.length; // 10</code> Например, если мы создали переменную <code>var firstName = &quot;Charles&quot;</code> , мы могли бы узнать, как долго строка <code>&quot;Charles&quot;</code> используется с использованием свойства <code>firstName.length</code> .
</section>
## Instructions
<section id="instructions"> Используйте свойство <code>.length</code> чтобы подсчитать количество символов в переменной <code>lastName</code> и назначить его <code>lastNameLength</code> . </section>
<section id='instructions'>
Используйте свойство <code>.length</code> чтобы подсчитать количество символов в переменной <code>lastName</code> и назначить его <code>lastNameLength</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>lastNameLength</code> должно быть равно восьми.
testString: 'assert((function(){if(typeof lastNameLength !== "undefined" && typeof lastNameLength === "number" && lastNameLength === 8){return true;}else{return false;}})(), "<code>lastNameLength</code> should be equal to eight.");'
- text: 'Вы должны получить длину <code>lastName</code> , используя <code>.length</code> как это: <code>lastName.length</code> .'
testString: 'assert((function(){if(code.match(/\.length/gi) && code.match(/\.length/gi).length >= 2 && code.match(/var lastNameLength \= 0;/gi) && code.match(/var lastNameLength \= 0;/gi).length >= 1){return true;}else{return false;}})(), "You should be getting the length of <code>lastName</code> by using <code>.length</code> like this: <code>lastName.length</code>.");'
- text: You should not change the variable declarations in the <code>// Setup</code> section.
testString: assert(code.match(/var lastNameLength = 0;/) && code.match(/var lastName = "Lovelace";/));
- text: <code>lastNameLength</code> should be equal to eight.
testString: assert(typeof lastNameLength !== 'undefined' && lastNameLength === 8);
- text: 'You should be getting the length of <code>lastName</code> by using <code>.length</code> like this: <code>lastName.length</code>.'
testString: assert(code.match(/=\s*lastName\.length/g) && !code.match(/lastName\s*=\s*8/));
```
@@ -50,22 +57,19 @@ lastNameLength = lastName;
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
// solution required
var firstNameLength = 0;
var firstName = "Ada";
firstNameLength = firstName.length;
var lastNameLength = 0;
var lastName = "Lovelace";
lastNameLength = lastName.length;
```
</section>

View File

@@ -2,27 +2,32 @@
id: 56533eb9ac21ba0edf2244ae
title: Finding a Remainder in JavaScript
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/cWP24Ub
forumTopicId: 18184
localeTitle: Поиск остатка в JavaScript
---
## Description
<section id="description"> Оператор <dfn>остатка</dfn> <code>%</code> дает остаток от деления двух чисел. <strong>пример</strong> <blockquote> 5% 2 = 1, потому что <br> Math.floor (5/2) = 2 (Quotient) <br> 2 * 2 = 4 <br> 5 - 4 = 1 (Остаток) </blockquote> <strong>Применение</strong> <br> В математике число может быть проверено как четное или нечетное, проверяя остаток от деления числа на <code>2</code> . <blockquote> 17% 2 = 1 (17 - нечетное) <br> 48% 2 = 0 (48 равно) </blockquote> <strong>Заметка</strong> <br> Оператор <dfn>остатка</dfn> иногда некорректно называют оператором «модуль». Он очень похож на модуль, но не работает должным образом с отрицательными числами. </section>
<section id='description'>
Оператор <dfn>остатка</dfn> <code>%</code> дает остаток от деления двух чисел. <strong>пример</strong> <blockquote> 5% 2 = 1, потому что <br> Math.floor (5/2) = 2 (Quotient) <br> 2 * 2 = 4 <br> 5 - 4 = 1 (Остаток) </blockquote> <strong>Применение</strong> <br> В математике число может быть проверено как четное или нечетное, проверяя остаток от деления числа на <code>2</code> . <blockquote> 17% 2 = 1 (17 - нечетное) <br> 48% 2 = 0 (48 равно) </blockquote> <strong>Заметка</strong> <br> Оператор <dfn>остатка</dfn> иногда некорректно называют оператором «модуль». Он очень похож на модуль, но не работает должным образом с отрицательными числами.
</section>
## Instructions
<section id="instructions"> Установите <code>remainder</code> равный остальной части <code>11</code> деленной на <code>3</code> используя оператор <dfn>остатка</dfn> ( <code>%</code> ). </section>
<section id='instructions'>
Установите <code>remainder</code> равный остальной части <code>11</code> деленной на <code>3</code> используя оператор <dfn>остатка</dfn> ( <code>%</code> ).
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>remainder</code> переменной должен быть инициализирован
testString: 'assert(/var\s+?remainder/.test(code), "The variable <code>remainder</code> should be initialized");'
- text: Стоимость <code>remainder</code> должна быть равна <code>2</code>
testString: 'assert(remainder === 2, "The value of <code>remainder</code> should be <code>2</code>");'
- text: Вы должны использовать оператор <code>%</code>
testString: 'assert(/\s+?remainder\s*?=\s*?.*%.*;/.test(code), "You should use the <code>%</code> operator");'
- text: The variable <code>remainder</code> should be initialized
testString: assert(/var\s+?remainder/.test(code));
- text: The value of <code>remainder</code> should be <code>2</code>
testString: assert(remainder === 2);
- text: You should use the <code>%</code> operator
testString: assert(/\s+?remainder\s*?=\s*?.*%.*;/.test(code));
```
@@ -42,12 +47,12 @@ var remainder;
</div>
### After Test
### After Tests
<div id='js-teardown'>
```js
console.info('after the test');
(function(y){return 'remainder = '+y;})(remainder);
```
</div>
@@ -58,6 +63,7 @@ console.info('after the test');
<section id='solution'>
```js
// solution required
var remainder = 11 % 3;
```
</section>

View File

@@ -2,27 +2,32 @@
id: cf1111c1c11feddfaeb9bdef
title: Generate Random Fractions with JavaScript
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/cyWJJs3
forumTopicId: 18185
localeTitle: Генерировать случайные дроби с помощью JavaScript
---
## Description
<section id="description"> Случайные числа полезны для создания случайного поведения. JavaScript имеет функцию <code>Math.random()</code> которая генерирует случайное десятичное число между <code>0</code> (включительно) и не совсем до <code>1</code> (исключая). Таким образом, <code>Math.random()</code> может возвращать <code>0</code> но никогда не возвращать <code>1</code> <strong>Примечание</strong> <br> Подобно <a href="learn/javascript-algorithms-and-data-structures/basic-javascript/storing-values-with-the-assignment-operator" target="_blank">сохранению значений с помощью Equal Operator</a> , все вызовы функций будут разрешены до выполнения <code>return</code> , поэтому мы можем <code>return</code> значение функции <code>Math.random()</code> . </section>
<section id='description'>
Случайные числа полезны для создания случайного поведения. JavaScript имеет функцию <code>Math.random()</code> которая генерирует случайное десятичное число между <code>0</code> (включительно) и не совсем до <code>1</code> (исключая). Таким образом, <code>Math.random()</code> может возвращать <code>0</code> но никогда не возвращать <code>1</code> <strong>Примечание</strong> <br> Подобно <a href="learn/javascript-algorithms-and-data-structures/basic-javascript/storing-values-with-the-assignment-operator" target="_blank">сохранению значений с помощью Equal Operator</a> , все вызовы функций будут разрешены до выполнения <code>return</code> , поэтому мы можем <code>return</code> значение функции <code>Math.random()</code> .
</section>
## Instructions
<section id="instructions"> Измените <code>randomFraction</code> чтобы вернуть случайное число вместо возврата <code>0</code> . </section>
<section id='instructions'>
Измените <code>randomFraction</code> чтобы вернуть случайное число вместо возврата <code>0</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>randomFraction</code> должно возвращать случайное число.
testString: 'assert(typeof randomFraction() === "number", "<code>randomFraction</code> should return a random number.");'
- text: 'Число, возвращаемое <code>randomFraction</code> должно быть десятичным.'
testString: 'assert((randomFraction()+""). match(/\./g), "The number returned by <code>randomFraction</code> should be a decimal.");'
- text: Вы должны использовать <code>Math.random</code> для генерации случайного десятичного числа.
testString: 'assert(code.match(/Math\.random/g).length >= 0, "You should be using <code>Math.random</code> to generate the random decimal number.");'
- text: <code>randomFraction</code> should return a random number.
testString: assert(typeof randomFraction() === "number");
- text: The number returned by <code>randomFraction</code> should be a decimal.
testString: assert((randomFraction()+''). match(/\./g));
- text: You should be using <code>Math.random</code> to generate the random decimal number.
testString: assert(code.match(/Math\.random/g).length >= 0);
```
@@ -47,12 +52,12 @@ function randomFraction() {
</div>
### After Test
### After Tests
<div id='js-teardown'>
```js
console.info('after the test');
(function(){return randomFraction();})();
```
</div>
@@ -63,6 +68,9 @@ console.info('after the test');
<section id='solution'>
```js
// solution required
function randomFraction() {
return Math.random();
}
```
</section>

View File

@@ -2,29 +2,34 @@
id: cf1111c1c12feddfaeb1bdef
title: Generate Random Whole Numbers with JavaScript
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/cRn6bfr
forumTopicId: 18186
localeTitle: Генерировать случайные целые числа с помощью JavaScript
---
## Description
<section id="description"> Замечательно, что мы можем генерировать случайные десятичные числа, но это еще более полезно, если мы используем его для генерации случайных целых чисел. <ol><li> Используйте <code>Math.random()</code> для генерации случайного десятичного знака. </li><li> Умножьте это случайное число на <code>20</code> . </li><li> Используйте другую функцию, <code>Math.floor()</code> чтобы округлить число до его ближайшего целого числа. </li></ol> Помните, что <code>Math.random()</code> никогда не может полностью вернуть <code>1</code> и, поскольку мы округливаем, на самом деле получить <code>20</code> невозможно. Этот метод даст нам целое число от <code>0</code> до <code>19</code> . Соединяя все вместе, это выглядит как наш код: <code>Math.floor(Math.random() * 20);</code> Мы вызываем <code>Math.random()</code> , умножая результат на 20, затем передавая значение функции <code>Math.floor()</code> чтобы округлить значение до ближайшего целого числа. </section>
<section id='description'>
Замечательно, что мы можем генерировать случайные десятичные числа, но это еще более полезно, если мы используем его для генерации случайных целых чисел. <ol><li> Используйте <code>Math.random()</code> для генерации случайного десятичного знака. </li><li> Умножьте это случайное число на <code>20</code> . </li><li> Используйте другую функцию, <code>Math.floor()</code> чтобы округлить число до его ближайшего целого числа. </li></ol> Помните, что <code>Math.random()</code> никогда не может полностью вернуть <code>1</code> и, поскольку мы округливаем, на самом деле получить <code>20</code> невозможно. Этот метод даст нам целое число от <code>0</code> до <code>19</code> . Соединяя все вместе, это выглядит как наш код: <code>Math.floor(Math.random() * 20);</code> Мы вызываем <code>Math.random()</code> , умножая результат на 20, затем передавая значение функции <code>Math.floor()</code> чтобы округлить значение до ближайшего целого числа.
</section>
## Instructions
<section id="instructions"> Используйте этот метод для генерации и возврата случайного целого числа от <code>0</code> до <code>9</code> . </section>
<section id='instructions'>
Используйте этот метод для генерации и возврата случайного целого числа от <code>0</code> до <code>9</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: Результат <code>randomWholeNum</code> должен быть целым числом.
testString: 'assert(typeof randomWholeNum() === "number" && (function(){var r = randomWholeNum();return Math.floor(r) === r;})(), "The result of <code>randomWholeNum</code> should be a whole number.");'
- text: Вы должны использовать <code>Math.random</code> для генерации случайного числа.
testString: 'assert(code.match(/Math.random/g).length > 1, "You should be using <code>Math.random</code> to generate a random number.");'
- text: 'Вы должны умножить результат <code>Math.random</code> на 10, чтобы сделать его числом от нуля до девяти.'
testString: 'assert(code.match(/\s*?Math.random\s*?\(\s*?\)\s*?\*\s*?10[\D]\s*?/g) || code.match(/\s*?10\s*?\*\s*?Math.random\s*?\(\s*?\)\s*?/g), "You should have multiplied the result of <code>Math.random</code> by 10 to make it a number that is between zero and nine.");'
- text: Вы должны использовать <code>Math.floor</code> для удаления десятичной части числа.
testString: 'assert(code.match(/Math.floor/g).length > 1, "You should use <code>Math.floor</code> to remove the decimal part of the number.");'
- text: The result of <code>randomWholeNum</code> should be a whole number.
testString: assert(typeof randomWholeNum() === "number" && (function(){var r = randomWholeNum();return Math.floor(r) === r;})());
- text: You should be using <code>Math.random</code> to generate a random number.
testString: assert(code.match(/Math.random/g).length > 1);
- text: You should have multiplied the result of <code>Math.random</code> by 10 to make it a number that is between zero and nine.
testString: assert(code.match(/\s*?Math.random\s*?\(\s*?\)\s*?\*\s*?10[\D]\s*?/g) || code.match(/\s*?10\s*?\*\s*?Math.random\s*?\(\s*?\)\s*?/g));
- text: You should use <code>Math.floor</code> to remove the decimal part of the number.
testString: assert(code.match(/Math.floor/g).length > 1);
```
@@ -49,12 +54,12 @@ function randomWholeNum() {
</div>
### After Test
### After Tests
<div id='js-teardown'>
```js
console.info('after the test');
(function(){return randomWholeNum();})();
```
</div>
@@ -65,6 +70,10 @@ console.info('after the test');
<section id='solution'>
```js
// solution required
var randomNumberBetween0and19 = Math.floor(Math.random() * 20);
function randomWholeNum() {
return Math.floor(Math.random() * 10);
}
```
</section>

View File

@@ -2,29 +2,34 @@
id: cf1111c1c12feddfaeb2bdef
title: Generate Random Whole Numbers within a Range
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/cm83yu6
forumTopicId: 18187
localeTitle: Генерировать случайные целые числа в пределах диапазона
---
## Description
<section id="description"> Вместо того, чтобы генерировать случайное число между нулем и заданным числом, как это было раньше, мы можем сгенерировать случайное число, которое попадает в диапазон двух конкретных чисел. Для этого определим минимальное число <code>min</code> и максимальное число <code>max</code> . Вот формула, которую мы будем использовать. Найдите минутку, чтобы прочитать ее и попытайтесь понять, что делает этот код: <code>Math.floor(Math.random() * (max - min + 1)) + min</code> </section>
<section id='description'>
Вместо того, чтобы генерировать случайное число между нулем и заданным числом, как это было раньше, мы можем сгенерировать случайное число, которое попадает в диапазон двух конкретных чисел. Для этого определим минимальное число <code>min</code> и максимальное число <code>max</code> . Вот формула, которую мы будем использовать. Найдите минутку, чтобы прочитать ее и попытайтесь понять, что делает этот код: <code>Math.floor(Math.random() * (max - min + 1)) + min</code>
</section>
## Instructions
<section id="instructions"> Создайте функцию <code>randomRange</code> которая принимает диапазон <code>myMin</code> и <code>myMax</code> и возвращает случайное число, которое больше или равно <code>myMin</code> , и меньше или равно <code>myMax</code> включительно. </section>
<section id='instructions'>
Создайте функцию <code>randomRange</code> которая принимает диапазон <code>myMin</code> и <code>myMax</code> и возвращает случайное число, которое больше или равно <code>myMin</code> , и меньше или равно <code>myMax</code> включительно.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: 'Наименьшее случайное число, которое может быть создано <code>randomRange</code> должно быть равно минимальному числу <code>myMin</code> .'
testString: 'assert(calcMin === 5, "The lowest random number that can be generated by <code>randomRange</code> should be equal to your minimum number, <code>myMin</code>.");'
- text: 'Наибольшее случайное число, которое может быть сгенерировано <code>randomRange</code> должно быть равно максимальному числу <code>myMax</code> .'
testString: 'assert(calcMax === 15, "The highest random number that can be generated by <code>randomRange</code> should be equal to your maximum number, <code>myMax</code>.");'
- text: 'Случайное число, генерируемое <code>randomRange</code> должно быть целым числом, а не десятичным.'
testString: 'assert(randomRange(0,1) % 1 === 0 , "The random number generated by <code>randomRange</code> should be an integer, not a decimal.");'
- text: <code>randomRange</code> должен использовать как <code>myMax</code> и <code>myMin</code> и возвращать случайное число в вашем диапазоне.
testString: 'assert((function(){if(code.match(/myMax/g).length > 1 && code.match(/myMin/g).length > 2 && code.match(/Math.floor/g) && code.match(/Math.random/g)){return true;}else{return false;}})(), "<code>randomRange</code> should use both <code>myMax</code> and <code>myMin</code>, and return a random number in your range.");'
- text: The lowest random number that can be generated by <code>randomRange</code> should be equal to your minimum number, <code>myMin</code>.
testString: assert(calcMin === 5);
- text: The highest random number that can be generated by <code>randomRange</code> should be equal to your maximum number, <code>myMax</code>.
testString: assert(calcMax === 15);
- text: The random number generated by <code>randomRange</code> should be an integer, not a decimal.
testString: assert(randomRange(0,1) % 1 === 0 );
- text: <code>randomRange</code> should use both <code>myMax</code> and <code>myMin</code>, and return a random number in your range.
testString: assert((function(){if(code.match(/myMax/g).length > 1 && code.match(/myMin/g).length > 2 && code.match(/Math.floor/g) && code.match(/Math.random/g)){return true;}else{return false;}})());
```
@@ -59,12 +64,25 @@ var myRandom = randomRange(5, 15);
</div>
### After Test
### After Tests
<div id='js-teardown'>
```js
console.info('after the test');
var calcMin = 100;
var calcMax = -100;
for(var i = 0; i < 100; i++) {
var result = randomRange(5,15);
calcMin = Math.min(calcMin, result);
calcMax = Math.max(calcMax, result);
}
(function(){
if(typeof myRandom === 'number') {
return "myRandom = " + myRandom;
} else {
return "myRandom undefined";
}
})()
```
</div>
@@ -75,6 +93,9 @@ console.info('after the test');
<section id='solution'>
```js
// solution required
function randomRange(myMin, myMax) {
return Math.floor(Math.random() * (myMax - myMin + 1)) + myMin;
}
```
</section>

View File

@@ -2,29 +2,34 @@
id: 56533eb9ac21ba0edf2244be
title: Global Scope and Functions
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/cQM7mCN
forumTopicId: 18193
localeTitle: Глобальная область и функции
---
## Description
<section id="description"> В JavaScript <dfn>область видимости</dfn> относится к видимости переменных. Переменные, определенные вне функционального блока, имеют <dfn>глобальную</dfn> область. Это означает, что их можно увидеть везде в вашем JavaScript-коде. Переменные, которые используются без ключевого слова <code>var</code> , автоматически создаются в <code>global</code> области. Это может привести к непредвиденным последствиям в другом месте вашего кода или при повторном запуске функции. Вы всегда должны объявлять переменные с помощью <code>var</code> . </section>
<section id='description'>
В JavaScript <dfn>область видимости</dfn> относится к видимости переменных. Переменные, определенные вне функционального блока, имеют <dfn>глобальную</dfn> область. Это означает, что их можно увидеть везде в вашем JavaScript-коде. Переменные, которые используются без ключевого слова <code>var</code> , автоматически создаются в <code>global</code> области. Это может привести к непредвиденным последствиям в другом месте вашего кода или при повторном запуске функции. Вы всегда должны объявлять переменные с помощью <code>var</code> .
</section>
## Instructions
<section id="instructions"> Используя <code>var</code> , объявляйте <code>global</code> переменную <code>myGlobal</code> вне любой функции. Инициализируйте его со значением <code>10</code> . Внутри функции <code>fun1</code> присвойте <code>5</code> <code>oopsGlobal</code> <strong><em>без</em></strong> использования ключевого слова <code>var</code> . </section>
<section id='instructions'>
Используя <code>var</code> , объявляйте <code>global</code> переменную <code>myGlobal</code> вне любой функции. Инициализируйте его со значением <code>10</code> . Внутри функции <code>fun1</code> присвойте <code>5</code> <code>oopsGlobal</code> <strong><em>без</em></strong> использования ключевого слова <code>var</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>myGlobal</code> следует определить
testString: 'assert(typeof myGlobal != "undefined", "<code>myGlobal</code> should be defined");'
- text: <code>myGlobal</code> должен иметь значение <code>10</code>
testString: 'assert(myGlobal === 10, "<code>myGlobal</code> should have a value of <code>10</code>");'
- text: <code>myGlobal</code> следует объявить с помощью ключевого слова <code>var</code>
testString: 'assert(/var\s+myGlobal/.test(code), "<code>myGlobal</code> should be declared using the <code>var</code> keyword");'
- text: <code>oopsGlobal</code> должен быть глобальной переменной и иметь значение <code>5</code>
testString: 'assert(typeof oopsGlobal != "undefined" && oopsGlobal === 5, "<code>oopsGlobal</code> should be a global variable and have a value of <code>5</code>");'
- text: <code>myGlobal</code> should be defined
testString: assert(typeof myGlobal != "undefined");
- text: <code>myGlobal</code> should have a value of <code>10</code>
testString: assert(myGlobal === 10);
- text: <code>myGlobal</code> should be declared using the <code>var</code> keyword
testString: assert(/var\s+myGlobal/.test(code));
- text: <code>oopsGlobal</code> should be a global variable and have a value of <code>5</code>
testString: assert(typeof oopsGlobal != "undefined" && oopsGlobal === 5);
```
@@ -60,7 +65,7 @@ function fun2() {
</div>
### Before Test
### Before Tests
<div id='js-setup'>
```js
@@ -89,11 +94,15 @@ capture();
</div>
### After Test
### After Tests
<div id='js-teardown'>
```js
console.info('after the test');
fun1();
fun2();
uncapture();
(function() { return logOutput || "console.log never called"; })();
```
</div>
@@ -104,6 +113,25 @@ console.info('after the test');
<section id='solution'>
```js
// solution required
// Declare your variable here
var myGlobal = 10;
function fun1() {
// Assign 5 to oopsGlobal Here
oopsGlobal = 5;
}
// Only change code above this line
function fun2() {
var output = "";
if(typeof myGlobal != "undefined") {
output += "myGlobal: " + myGlobal;
}
if(typeof oopsGlobal != "undefined") {
output += " oopsGlobal: " + oopsGlobal;
}
console.log(output);
}
```
</section>

View File

@@ -2,27 +2,32 @@
id: 56533eb9ac21ba0edf2244c0
title: Global vs. Local Scope in Functions
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/c2QwKH2
forumTopicId: 18194
localeTitle: Глобальная и локальная область функций
---
## Description
<section id="description"> Можно иметь как <dfn>локальные, так</dfn> и <dfn>глобальные</dfn> переменные с тем же именем. Когда вы это делаете, <code>local</code> переменная имеет приоритет над <code>global</code> переменной. В этом примере: <blockquote> var someVar = &quot;Hat&quot;; <br> function myFun () { <br> var someVar = &quot;Голова&quot;; <br> return someVar; <br> } </blockquote> Функция <code>myFun</code> вернет <code>&quot;Head&quot;</code> потому что присутствует <code>local</code> версия переменной. </section>
<section id='description'>
Можно иметь как <dfn>локальные, так</dfn> и <dfn>глобальные</dfn> переменные с тем же именем. Когда вы это делаете, <code>local</code> переменная имеет приоритет над <code>global</code> переменной. В этом примере: <blockquote> var someVar = &quot;Hat&quot;; <br> function myFun () { <br> var someVar = &quot;Голова&quot;; <br> return someVar; <br> } </blockquote> Функция <code>myFun</code> вернет <code>&quot;Head&quot;</code> потому что присутствует <code>local</code> версия переменной.
</section>
## Instructions
<section id="instructions"> Добавьте локальную переменную в функцию <code>myOutfit</code> чтобы переопределить значение <code>outerWear</code> с помощью <code>&quot;sweater&quot;</code> . </section>
<section id='instructions'>
Добавьте локальную переменную в функцию <code>myOutfit</code> чтобы переопределить значение <code>outerWear</code> с помощью <code>&quot;sweater&quot;</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: Не изменяйте значение глобального <code>outerWear</code>
testString: 'assert(outerWear === "T-Shirt", "Do not change the value of the global <code>outerWear</code>");'
- text: <code>myOutfit</code> должен вернуть <code>&quot;sweater&quot;</code>
testString: 'assert(myOutfit() === "sweater", "<code>myOutfit</code> should return <code>"sweater"</code>");'
- text: Не меняйте оператор возврата
testString: 'assert(/return outerWear/.test(code), "Do not change the return statement");'
- text: Do not change the value of the global <code>outerWear</code>
testString: assert(outerWear === "T-Shirt");
- text: <code>myOutfit</code> should return <code>"sweater"</code>
testString: assert(myOutfit() === "sweater");
- text: Do not change the return statement
testString: assert(/return outerWear/.test(code));
```
@@ -52,14 +57,17 @@ myOutfit();
</div>
</section>
## Solution
<section id='solution'>
```js
// solution required
var outerWear = "T-Shirt";
function myOutfit() {
var outerWear = "sweater";
return outerWear;
}
```
</section>

View File

@@ -2,15 +2,19 @@
id: 5664820f61c48e80c9fa476c
title: Golf Code
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/c9ykNUR
forumTopicId: 18195
localeTitle: Гольф-код
---
## Description
<section id="description"> В игре в <a href="https://en.wikipedia.org/wiki/Golf" target="_blank">гольф</a> каждое отверстие имеет <code>par</code> означая среднее число <code>strokes</code> игрок в гольф , как ожидается , чтобы сделать для того , чтобы утопить мяч в отверстие , чтобы закончить игру. В зависимости от того , насколько выше или ниже <code>par</code> ваши <code>strokes</code> , там есть другое прозвище. Ваша функция будет передана параметрам <code>par</code> и <code>strokes</code> . Верните правильную строку в соответствии с этой таблицей, которая отображает штрихи в порядке приоритета; верхняя (самая высокая) до нижней (самая низкая): <table class="table table-striped"><thead><tr><th> Штрихи </th><th> Вернуть </th></tr></thead><tbody><tr><td> 1 </td><td> &quot;Отверстие в одном!&quot; </td></tr><tr><td> &lt;= par - 2 </td><td> «Орел» </td></tr><tr><td> пар - 1 </td><td> &quot;Птичка&quot; </td></tr><tr><td> паритет </td><td> «Пар» </td></tr><tr><td> par + 1 </td><td> «Пугало» </td></tr><tr><td> par + 2 </td><td> &quot;Двойной Богей&quot; </td></tr><tr><td> &gt; = par + 3 </td><td> &quot;Иди домой!&quot; </td></tr></tbody></table> <code>par</code> и <code>strokes</code> всегда будут числовыми и положительными. Мы добавили массив всех имен для вашего удобства. </section>
<section id='description'>
В игре в <a href="https://en.wikipedia.org/wiki/Golf" target="_blank">гольф</a> каждое отверстие имеет <code>par</code> означая среднее число <code>strokes</code> игрок в гольф , как ожидается , чтобы сделать для того , чтобы утопить мяч в отверстие , чтобы закончить игру. В зависимости от того , насколько выше или ниже <code>par</code> ваши <code>strokes</code> , там есть другое прозвище. Ваша функция будет передана параметрам <code>par</code> и <code>strokes</code> . Верните правильную строку в соответствии с этой таблицей, которая отображает штрихи в порядке приоритета; верхняя (самая высокая) до нижней (самая низкая): <table class="table table-striped"><thead><tr><th> Штрихи </th><th> Вернуть </th></tr></thead><tbody><tr><td> 1 </td><td> &quot;Отверстие в одном!&quot; </td></tr><tr><td> &lt;= par - 2 </td><td> «Орел» </td></tr><tr><td> пар - 1 </td><td> &quot;Птичка&quot; </td></tr><tr><td> паритет </td><td> «Пар» </td></tr><tr><td> par + 1 </td><td> «Пугало» </td></tr><tr><td> par + 2 </td><td> &quot;Двойной Богей&quot; </td></tr><tr><td> &gt; = par + 3 </td><td> &quot;Иди домой!&quot; </td></tr></tbody></table> <code>par</code> и <code>strokes</code> всегда будут числовыми и положительными. Мы добавили массив всех имен для вашего удобства.
</section>
## Instructions
<section id="instructions">
<section id='instructions'>
</section>
## Tests
@@ -18,28 +22,28 @@ localeTitle: Гольф-код
```yml
tests:
- text: '<code>golfScore(4, 1)</code> должен вернуть «Hole-in-one!».'
testString: 'assert(golfScore(4, 1) === "Hole-in-one!", "<code>golfScore(4, 1)</code> should return "Hole-in-one!"");'
- text: '<code>golfScore(4, 2)</code> должен вернуть «Eagle»'
testString: 'assert(golfScore(4, 2) === "Eagle", "<code>golfScore(4, 2)</code> should return "Eagle"");'
- text: '<code>golfScore(5, 2)</code> должен вернуть «Eagle»'
testString: 'assert(golfScore(5, 2) === "Eagle", "<code>golfScore(5, 2)</code> should return "Eagle"");'
- text: '<code>golfScore(4, 3)</code> должен вернуть «Birdie»'
testString: 'assert(golfScore(4, 3) === "Birdie", "<code>golfScore(4, 3)</code> should return "Birdie"");'
- text: '<code>golfScore(4, 4)</code> должен вернуть «Par»'
testString: 'assert(golfScore(4, 4) === "Par", "<code>golfScore(4, 4)</code> should return "Par"");'
- text: '<code>golfScore(1, 1)</code> должен вернуть «Hole-in-one!».'
testString: 'assert(golfScore(1, 1) === "Hole-in-one!", "<code>golfScore(1, 1)</code> should return "Hole-in-one!"");'
- text: '<code>golfScore(5, 5)</code> должен вернуть «Par»'
testString: 'assert(golfScore(5, 5) === "Par", "<code>golfScore(5, 5)</code> should return "Par"");'
- text: '<code>golfScore(4, 5)</code> должен вернуть «Bogey»'
testString: 'assert(golfScore(4, 5) === "Bogey", "<code>golfScore(4, 5)</code> should return "Bogey"");'
- text: '<code>golfScore(4, 6)</code> должен вернуть «Double Bogey»'
testString: 'assert(golfScore(4, 6) === "Double Bogey", "<code>golfScore(4, 6)</code> should return "Double Bogey"");'
- text: '<code>golfScore(4, 7)</code> должен вернуться «Go Home!».'
testString: 'assert(golfScore(4, 7) === "Go Home!", "<code>golfScore(4, 7)</code> should return "Go Home!"");'
- text: '<code>golfScore(5, 9)</code> должен вернуться «Go Home!».'
testString: 'assert(golfScore(5, 9) === "Go Home!", "<code>golfScore(5, 9)</code> should return "Go Home!"");'
- text: <code>golfScore(4, 1)</code> should return "Hole-in-one!"
testString: assert(golfScore(4, 1) === "Hole-in-one!");
- text: <code>golfScore(4, 2)</code> should return "Eagle"
testString: assert(golfScore(4, 2) === "Eagle");
- text: <code>golfScore(5, 2)</code> should return "Eagle"
testString: assert(golfScore(5, 2) === "Eagle");
- text: <code>golfScore(4, 3)</code> should return "Birdie"
testString: assert(golfScore(4, 3) === "Birdie");
- text: <code>golfScore(4, 4)</code> should return "Par"
testString: assert(golfScore(4, 4) === "Par");
- text: <code>golfScore(1, 1)</code> should return "Hole-in-one!"
testString: assert(golfScore(1, 1) === "Hole-in-one!");
- text: <code>golfScore(5, 5)</code> should return "Par"
testString: assert(golfScore(5, 5) === "Par");
- text: <code>golfScore(4, 5)</code> should return "Bogey"
testString: assert(golfScore(4, 5) === "Bogey");
- text: <code>golfScore(4, 6)</code> should return "Double Bogey"
testString: assert(golfScore(4, 6) === "Double Bogey");
- text: <code>golfScore(4, 7)</code> should return "Go Home!"
testString: assert(golfScore(4, 7) === "Go Home!");
- text: <code>golfScore(5, 9)</code> should return "Go Home!"
testString: assert(golfScore(5, 9) === "Go Home!");
```
@@ -67,14 +71,39 @@ golfScore(5, 4);
</div>
</section>
## Solution
<section id='solution'>
```js
// solution required
function golfScore(par, strokes) {
if (strokes === 1) {
return "Hole-in-one!";
}
if (strokes <= par - 2) {
return "Eagle";
}
if (strokes === par - 1) {
return "Birdie";
}
if (strokes === par) {
return "Par";
}
if (strokes === par + 1) {
return "Bogey";
}
if(strokes === par + 2) {
return "Double Bogey";
}
return "Go Home!";
}
```
</section>

View File

@@ -2,29 +2,34 @@
id: 56533eb9ac21ba0edf2244ac
title: Increment a Number with JavaScript
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/ca8GLT9
forumTopicId: 18201
localeTitle: Увеличение номера с помощью JavaScript
---
## Description
<section id="description"> Вы можете легко <dfn>увеличить</dfn> или добавьте к переменной с <code>++</code> оператора. <code>i++;</code> эквивалентно <code>i = i + 1;</code> <strong>Заметка</strong> <br> Вся строка становится <code>i++;</code> , устраняя необходимость равенства знака. </section>
<section id='description'>
Вы можете легко <dfn>увеличить</dfn> или добавьте к переменной с <code>++</code> оператора. <code>i++;</code> эквивалентно <code>i = i + 1;</code> <strong>Заметка</strong> <br> Вся строка становится <code>i++;</code> , устраняя необходимость равенства знака.
</section>
## Instructions
<section id="instructions"> Измените код, чтобы использовать оператор <code>++</code> на <code>myVar</code> . <strong>намек</strong> <br> Подробнее об <a href="https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Increment_()" target="_blank">арифметических операторах - Increment (++)</a> . </section>
<section id='instructions'>
Измените код, чтобы использовать оператор <code>++</code> на <code>myVar</code> . <strong>намек</strong> <br> Подробнее об <a href="https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Increment_()" target="_blank">арифметических операторах - Increment (++)</a> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>myVar</code> должен равняться <code>88</code>
testString: 'assert(myVar === 88, "<code>myVar</code> should equal <code>88</code>");'
- text: <code>myVar = myVar + 1;</code> следует изменить
testString: 'assert(/var\s*myVar\s*=\s*87;\s*\/*.*\s*([+]{2}\s*myVar|myVar\s*[+]{2});/.test(code), "<code>myVar = myVar + 1;</code> should be changed");'
- text: Использовать оператор <code>++</code>
testString: 'assert(/[+]{2}\s*myVar|myVar\s*[+]{2}/.test(code), "Use the <code>++</code> operator");'
- text: Не меняйте код над строкой
testString: 'assert(/var myVar = 87;/.test(code), "Do not change code above the line");'
- text: <code>myVar</code> should equal <code>88</code>
testString: assert(myVar === 88);
- text: <code>myVar = myVar + 1;</code> should be changed
testString: assert(/var\s*myVar\s*=\s*87;\s*\/*.*\s*([+]{2}\s*myVar|myVar\s*[+]{2});/.test(code));
- text: Use the <code>++</code> operator
testString: assert(/[+]{2}\s*myVar|myVar\s*[+]{2}/.test(code));
- text: Do not change code above the line
testString: assert(/var myVar = 87;/.test(code));
```
@@ -45,12 +50,12 @@ myVar = myVar + 1;
</div>
### After Test
### After Tests
<div id='js-teardown'>
```js
console.info('after the test');
(function(z){return 'myVar = ' + z;})(myVar);
```
</div>
@@ -61,6 +66,8 @@ console.info('after the test');
<section id='solution'>
```js
// solution required
var myVar = 87;
myVar++;
```
</section>

View File

@@ -2,23 +2,28 @@
id: 56533eb9ac21ba0edf2244a9
title: Initializing Variables with the Assignment Operator
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/cWJ4Bfb
forumTopicId: 301171
localeTitle: Инициализация переменных с помощью оператора присваивания
---
## Description
<section id="description"> Хорошей практикой является объявление переменной вместе с инициализацией её начальным значением. Код <code>var myVar = 0;</code> создает новую переменную <code>myVar</code> и присваивает ей начальное значение <code>0</code> . </section>
<section id='description'>
Хорошей практикой является объявление переменной вместе с инициализацией её начальным значением. Код <code>var myVar = 0;</code> создает новую переменную <code>myVar</code> и присваивает ей начальное значение <code>0</code> .
</section>
## Instructions
<section id="instructions"> Определите переменную <code>a</code> с помощью ключевого слова <code>var</code> и инициализируйте ее значением <code>9</code> . </section>
<section id='instructions'>
Определите переменную <code>a</code> с помощью ключевого слова <code>var</code> и инициализируйте ее значением <code>9</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: Инициализировать значение <code>a</code> до значения <code>9</code>
testString: 'assert(/var\s+a\s*=\s*9\s*/.test(code), "Initialize <code>a</code> to a value of <code>9</code>");'
- text: Initialize <code>a</code> to a value of <code>9</code>
testString: assert(/var\s+a\s*=\s*9\s*/.test(code));
```
@@ -30,21 +35,21 @@ tests:
<div id='js-seed'>
```js
// Пример
// Example
var ourVar = 19;
// Изменяйте код ниже этой строки
// Only change code below this line
```
</div>
### After Test
### After Tests
<div id='js-teardown'>
```js
if(typeof a !== 'undefined') {(function(a){return "a = " + a;})(a);} else { (function() {return 'a is undefined';})(); }
```
</div>
@@ -57,4 +62,5 @@ if(typeof a !== 'undefined') {(function(a){return "a = " + a;})(a);} else { (fun
```js
var a = 9;
```
</section>

View File

@@ -2,37 +2,42 @@
id: 56533eb9ac21ba0edf2244db
title: Introducing Else If Statements
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/caeJ2hm
forumTopicId: 18206
localeTitle: Представляем Else If Statementments
---
## Description
<section id="description"> Если у вас есть несколько условий, которые необходимо устранить, вы можете связать, <code>if</code> инструкции вместе с инструкциями <code>else if</code> . <blockquote> если (num&gt; 15) { <br> возвращение «Больше 15»; <br> } else if (num &lt;5) { <br> return «Меньше 5»; <br> } else { <br> возвращение «от 5 до 15»; <br> } </blockquote></section>
<section id='description'>
Если у вас есть несколько условий, которые необходимо устранить, вы можете связать, <code>if</code> инструкции вместе с инструкциями <code>else if</code> . <blockquote> если (num&gt; 15) { <br> возвращение «Больше 15»; <br> } else if (num &lt;5) { <br> return «Меньше 5»; <br> } else { <br> возвращение «от 5 до 15»; <br> } </blockquote>
</section>
## Instructions
<section id="instructions"> Преобразуйте логику, чтобы использовать инструкции <code>else if</code> . </section>
<section id='instructions'>
Преобразуйте логику, чтобы использовать инструкции <code>else if</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: Вы должны иметь по крайней мере два <code>else</code> заявления
testString: 'assert(code.match(/else/g).length > 1, "You should have at least two <code>else</code> statements");'
- text: У вас должно быть как минимум два оператора <code>if</code>
testString: 'assert(code.match(/if/g).length > 1, "You should have at least two <code>if</code> statements");'
- text: У вас должно быть закрытие и открытие фигурных скобок для каждого условия
testString: 'assert(code.match(/if\s*\((.+)\)\s*\{[\s\S]+\}\s*else if\s*\((.+)\)\s*\{[\s\S]+\}\s*else\s*\{[\s\S]+\s*\}/), "You should have closing and opening curly braces for each condition in your if else statement");'
- text: <code>testElseIf(0)</code> должен возвращать значение &quot;Меньше 5&quot;
testString: 'assert(testElseIf(0) === "Smaller than 5", "<code>testElseIf(0)</code> should return "Smaller than 5"");'
- text: '<code>testElseIf(5)</code> должен возвращать «Между 5 и 10»,'
testString: 'assert(testElseIf(5) === "Between 5 and 10", "<code>testElseIf(5)</code> should return "Between 5 and 10"");'
- text: '<code>testElseIf(7)</code> должен возвращать «от 5 до 10»,'
testString: 'assert(testElseIf(7) === "Between 5 and 10", "<code>testElseIf(7)</code> should return "Between 5 and 10"");'
- text: '<code>testElseIf(10)</code> должен возвращать «Между 5 и 10»,'
testString: 'assert(testElseIf(10) === "Between 5 and 10", "<code>testElseIf(10)</code> should return "Between 5 and 10"");'
- text: '<code>testElseIf(12)</code> должен возвращать «Больше 10»,'
testString: 'assert(testElseIf(12) === "Greater than 10", "<code>testElseIf(12)</code> should return "Greater than 10"");'
- text: You should have at least two <code>else</code> statements
testString: assert(code.match(/else/g).length > 1);
- text: You should have at least two <code>if</code> statements
testString: assert(code.match(/if/g).length > 1);
- text: You should have closing and opening curly braces for each <code>if else</code> code block.
testString: assert(code.match(/if\s*\((.+)\)\s*\{[\s\S]+\}\s*else if\s*\((.+)\)\s*\{[\s\S]+\}\s*else\s*\{[\s\S]+\s*\}/));
- text: <code>testElseIf(0)</code> should return "Smaller than 5"
testString: assert(testElseIf(0) === "Smaller than 5");
- text: <code>testElseIf(5)</code> should return "Between 5 and 10"
testString: assert(testElseIf(5) === "Between 5 and 10");
- text: <code>testElseIf(7)</code> should return "Between 5 and 10"
testString: assert(testElseIf(7) === "Between 5 and 10");
- text: <code>testElseIf(10)</code> should return "Between 5 and 10"
testString: assert(testElseIf(10) === "Between 5 and 10");
- text: <code>testElseIf(12)</code> should return "Greater than 10"
testString: assert(testElseIf(12) === "Greater than 10");
```
@@ -63,14 +68,21 @@ testElseIf(7);
</div>
</section>
## Solution
<section id='solution'>
```js
// solution required
function testElseIf(val) {
if(val > 10) {
return "Greater than 10";
} else if(val < 5) {
return "Smaller than 5";
} else {
return "Between 5 and 10";
}
}
```
</section>

View File

@@ -2,35 +2,40 @@
id: 56533eb9ac21ba0edf2244da
title: Introducing Else Statements
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/cek4Efq
forumTopicId: 18207
localeTitle: Введение в новые заявления
---
## Description
<section id="description"> Когда условие для оператора <code>if</code> истинно, выполняется блок кода после него. Как насчет того, когда это условие ложно? Обычно ничего не происходило. С помощью инструкции <code>else</code> может выполняться альтернативный блок кода. <blockquote> если (num&gt; 10) { <br> возвращение «Больше, чем 10»; <br> } else { <br> вернуть «10 или меньше»; <br> } </blockquote></section>
<section id='description'>
Когда условие для оператора <code>if</code> истинно, выполняется блок кода после него. Как насчет того, когда это условие ложно? Обычно ничего не происходило. С помощью инструкции <code>else</code> может выполняться альтернативный блок кода. <blockquote> если (num&gt; 10) { <br> возвращение «Больше, чем 10»; <br> } else { <br> вернуть «10 или меньше»; <br> } </blockquote>
</section>
## Instructions
<section id="instructions"> Объедините операторы <code>if</code> в один оператор <code>if/else</code> . </section>
<section id='instructions'>
Объедините операторы <code>if</code> в один оператор <code>if/else</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: Вы должны иметь только один оператор <code>if</code> в редакторе
testString: 'assert(code.match(/if/g).length === 1, "You should only have one <code>if</code> statement in the editor");'
- text: Вы должны использовать инструкцию <code>else</code>
testString: 'assert(/else/g.test(code), "You should use an <code>else</code> statement");'
- text: <code>testElse(4)</code> должен возвращать «5 или меньше»
testString: 'assert(testElse(4) === "5 or Smaller", "<code>testElse(4)</code> should return "5 or Smaller"");'
- text: <code>testElse(5)</code> должен возвращать «5 или меньше»
testString: 'assert(testElse(5) === "5 or Smaller", "<code>testElse(5)</code> should return "5 or Smaller"");'
- text: '<code>testElse(6)</code> должен возвращать «Больше, чем 5»,'
testString: 'assert(testElse(6) === "Bigger than 5", "<code>testElse(6)</code> should return "Bigger than 5"");'
- text: <code>testElse(10)</code> должен возвращать «Больше 5»
testString: 'assert(testElse(10) === "Bigger than 5", "<code>testElse(10)</code> should return "Bigger than 5"");'
- text: Не меняйте код выше или ниже строк.
testString: 'assert(/var result = "";/.test(code) && /return result;/.test(code), "Do not change the code above or below the lines.");'
- text: You should only have one <code>if</code> statement in the editor
testString: assert(code.match(/if/g).length === 1);
- text: You should use an <code>else</code> statement
testString: assert(/else/g.test(code));
- text: <code>testElse(4)</code> should return "5 or Smaller"
testString: assert(testElse(4) === "5 or Smaller");
- text: <code>testElse(5)</code> should return "5 or Smaller"
testString: assert(testElse(5) === "5 or Smaller");
- text: <code>testElse(6)</code> should return "Bigger than 5"
testString: assert(testElse(6) === "Bigger than 5");
- text: <code>testElse(10)</code> should return "Bigger than 5"
testString: assert(testElse(10) === "Bigger than 5");
- text: Do not change the code above or below the lines.
testString: assert(/var result = "";/.test(code) && /return result;/.test(code));
```
@@ -65,14 +70,21 @@ testElse(4);
</div>
</section>
## Solution
<section id='solution'>
```js
// solution required
function testElse(val) {
var result = "";
if(val > 5) {
result = "Bigger than 5";
} else {
result = "5 or Smaller";
}
return result;
}
```
</section>

View File

@@ -2,25 +2,30 @@
id: 56104e9e514f539506016a5c
title: Iterate Odd Numbers With a For Loop
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/cm8n7T9
forumTopicId: 18212
localeTitle: Итерировать нечетные числа с помощью цикла
---
## Description
<section id="description"> Для циклов не нужно повторять одно за раз. Изменяя наше <code>final-expression</code> , мы можем считать четными числами. Мы начнем с <code>i = 0</code> и цикл while <code>i &lt; 10</code> . Мы будем увеличивать <code>i</code> на 2 каждый цикл с <code>i += 2</code> . <blockquote> var ourArray = []; <br> для (var i = 0; i &lt;10; i + = 2) { <br> ourArray.push (я); <br> } </blockquote> <code>ourArray</code> будет содержать <code>[0,2,4,6,8]</code> . Давайте изменим нашу <code>initialization</code> чтобы мы могли рассчитывать по нечетным числам. </section>
<section id='description'>
Для циклов не нужно повторять одно за раз. Изменяя наше <code>final-expression</code> , мы можем считать четными числами. Мы начнем с <code>i = 0</code> и цикл while <code>i &lt; 10</code> . Мы будем увеличивать <code>i</code> на 2 каждый цикл с <code>i += 2</code> . <blockquote> var ourArray = []; <br> для (var i = 0; i &lt;10; i + = 2) { <br> ourArray.push (я); <br> } </blockquote> <code>ourArray</code> будет содержать <code>[0,2,4,6,8]</code> . Давайте изменим нашу <code>initialization</code> чтобы мы могли рассчитывать по нечетным числам.
</section>
## Instructions
<section id="instructions"> Нажимайте нечетные числа от 1 до 9 до <code>myArray</code> используя цикл <code>for</code> . </section>
<section id='instructions'>
Нажимайте нечетные числа от 1 до 9 до <code>myArray</code> используя цикл <code>for</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: Вы должны использовать <code>for</code> петли для этого.
testString: 'assert(code.match(/for\s*\(/g).length > 1, "You should be using a <code>for</code> loop for this.");'
- text: '<code>myArray</code> должен равняться <code>[1,3,5,7,9]</code> .'
testString: 'assert.deepEqual(myArray, [1,3,5,7,9], "<code>myArray</code> should equal <code>[1,3,5,7,9]</code>.");'
- text: You should be using a <code>for</code> loop for this.
testString: assert(code.match(/for\s*\(/g).length > 1);
- text: <code>myArray</code> should equal <code>[1,3,5,7,9]</code>.
testString: assert.deepEqual(myArray, [1,3,5,7,9]);
```
@@ -48,12 +53,12 @@ var myArray = [];
</div>
### After Test
### After Tests
<div id='js-teardown'>
```js
console.info('after the test');
if(typeof myArray !== "undefined"){(function(){return myArray;})();}
```
</div>
@@ -64,6 +69,14 @@ console.info('after the test');
<section id='solution'>
```js
// solution required
var ourArray = [];
for (var i = 0; i < 10; i += 2) {
ourArray.push(i);
}
var myArray = [];
for (var i = 1; i < 10; i += 2) {
myArray.push(i);
}
```
</section>

View File

@@ -2,29 +2,34 @@
id: 5675e877dbd60be8ad28edc6
title: Iterate Through an Array with a For Loop
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/caeR3HB
forumTopicId: 18216
localeTitle: Итерация через массив с петлей
---
## Description
<section id="description"> Общей задачей в JavaScript является итерация содержимого массива. Один из способов сделать это - цикл <code>for</code> . Этот код выводит каждый элемент массива <code>arr</code> на консоль: <blockquote> var arr = [10,9,8,7,6]; <br> для (var i = 0; i &lt;arr.length; i ++) { <br> console.log (обр [я]); <br> } </blockquote> Помните, что массивы имеют нулевую нумерацию, что означает, что последний индекс массива - длина - 1. Наше <dfn>условие</dfn> для этого цикла равно <code>i &lt; arr.length</code> , которое останавливается, когда <code>i</code> является длиной - 1. </section>
<section id='description'>
Общей задачей в JavaScript является итерация содержимого массива. Один из способов сделать это - цикл <code>for</code> . Этот код выводит каждый элемент массива <code>arr</code> на консоль: <blockquote> var arr = [10,9,8,7,6]; <br> для (var i = 0; i &lt;arr.length; i ++) { <br> console.log (обр [я]); <br> } </blockquote> Помните, что массивы имеют нулевую нумерацию, что означает, что последний индекс массива - длина - 1. Наше <dfn>условие</dfn> для этого цикла равно <code>i &lt; arr.length</code> , которое останавливается, когда <code>i</code> является длиной - 1.
</section>
## Instructions
<section id="instructions"> Объявить и инициализировать значение переменной <code>total</code> равным <code>0</code> . Используйте цикл <code>for</code> чтобы добавить значение каждого элемента массива <code>myArr</code> в <code>total</code> . </section>
<section id='instructions'>
Объявить и инициализировать значение переменной <code>total</code> равным <code>0</code> . Используйте цикл <code>for</code> чтобы добавить значение каждого элемента массива <code>myArr</code> в <code>total</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>total</code> должно быть объявлено и инициализировано до 0
testString: 'assert(code.match(/var.*?total\s*=\s*0.*?;/), "<code>total</code> should be declared and initialized to 0");'
- text: <code>total</code> должна составлять 20
testString: 'assert(total === 20, "<code>total</code> should equal 20");'
- text: Вы должны использовать цикл <code>for</code> для итерации через <code>myArr</code>
testString: 'assert(code.match(/for\s*\(/g).length > 1 && code.match(/myArr\s*\[/), "You should use a <code>for</code> loop to iterate through <code>myArr</code>");'
- text: Не устанавливать <code>total</code> значение 20 напрямую
testString: 'assert(!code.match(/total[\s\+\-]*=\s*(\d(?!\s*[;,])|[1-9])/g), "Do not set <code>total</code> to 20 directly");'
- text: <code>total</code> should be declared and initialized to 0
testString: assert(code.match(/(var|let|const)\s*?total\s*=\s*0.*?;?/));
- text: <code>total</code> should equal 20
testString: assert(total === 20);
- text: You should use a <code>for</code> loop to iterate through <code>myArr</code>
testString: assert(code.match(/for\s*\(/g).length > 1 && code.match(/myArr\s*\[/));
- text: Do not set <code>total</code> to 20 directly
testString: assert(!code.match(/total[\s\+\-]*=\s*(0(?!\s*[;,]?$)|[1-9])/gm));
```
@@ -53,12 +58,12 @@ var myArr = [ 2, 3, 4, 5, 6];
</div>
### After Test
### After Tests
<div id='js-teardown'>
```js
console.info('after the test');
(function(){if(typeof total !== 'undefined') { return "total = " + total; } else { return "total is undefined";}})()
```
</div>
@@ -69,6 +74,19 @@ console.info('after the test');
<section id='solution'>
```js
// solution required
var ourArr = [ 9, 10, 11, 12];
var ourTotal = 0;
for (var i = 0; i < ourArr.length; i++) {
ourTotal += ourArr[i];
}
var myArr = [ 2, 3, 4, 5, 6];
var total = 0;
for (var i = 0; i < myArr.length; i++) {
total += myArr[i];
}
```
</section>

View File

@@ -2,27 +2,32 @@
id: 5a2efd662fb457916e1fe604
title: Iterate with JavaScript Do...While Loops
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/cDqWGcp
forumTopicId: 301172
localeTitle: Итерация с помощью JavaScript Do ... While Loops
---
## Description
<section id="description"> Вы можете запустить один и тот же код несколько раз, используя цикл. Следующий тип цикла, который вы узнаете, называется циклом « <code>do...while</code> », потому что он сначала « <code>do</code> » один проход кода внутри цикла, независимо от того, что происходит, а затем он запускает « <code>while</code> », указанное условие истинно и останавливается, как только это условие перестает быть истинным. Давайте посмотрим на пример. <blockquote> var ourArray = []; <br> var i = 0; <br> делать { <br> ourArray.push (я); <br> я ++; <br> } while (i &lt;5); </blockquote> Это ведет себя так же, как вы ожидали бы с любым другим типом цикла, и результирующий массив будет выглядеть как <code>[0, 1, 2, 3, 4]</code> . Однако то, что делает <code>do...while</code> отличается от других циклов, - это то, как оно ведет себя, когда условие не выполняется при первой проверке. Давайте посмотрим на это в действии. Вот регулярный цикл while, который будет запускать код в цикле, пока <code>i &lt; 5</code> . <blockquote> var ourArray = []; <br> var i = 5; <br> тогда как (i &lt;5) { <br> ourArray.push (я); <br> я ++; <br> } </blockquote> Обратите внимание, что мы инициализируем значение <code>i</code> равным 5. Когда мы выполняем следующую строку, мы замечаем, что <code>i</code> не меньше 5. Таким образом, мы не выполняем код внутри цикла. В результате <code>ourArray</code> будет добавлен к нему, поэтому он будет выглядеть так <code>[]</code> когда весь код в приведенном выше примере завершится. Теперь взгляните на цикл <code>do...while</code> while. <blockquote> var ourArray = []; <br> var i = 5; <br> делать { <br> ourArray.push (я); <br> я ++; <br> } while (i &lt;5); </blockquote> В этом случае мы инициализируем значение <code>i</code> как 5, как и в цикле while. Когда мы переходим к следующей строке, нет никакой проверки значения <code>i</code> , поэтому мы переходим к коду внутри фигурных скобок и выполняем его. Мы добавим один элемент в массив и увеличим <code>i</code> до того, как мы перейдем к проверке состояния. Затем, когда мы перейдем к проверке, если <code>i &lt; 5</code> видим, что <code>i</code> теперь 6, что не позволяет выполнить условную проверку. Итак, мы выходим из цикла и выполняем его. В конце приведенного выше примера значение <code>ourArray</code> равно <code>[5]</code> . По существу, цикл <code>do...while</code> while гарантирует, что код внутри цикла будет запускаться хотя бы один раз. Давайте попробуем <code>do...while</code> loop to work, нажав значения в массив. </section>
<section id='description'>
Вы можете запустить один и тот же код несколько раз, используя цикл. Следующий тип цикла, который вы узнаете, называется циклом « <code>do...while</code> », потому что он сначала « <code>do</code> » один проход кода внутри цикла, независимо от того, что происходит, а затем он запускает « <code>while</code> », указанное условие истинно и останавливается, как только это условие перестает быть истинным. Давайте посмотрим на пример. <blockquote> var ourArray = []; <br> var i = 0; <br> делать { <br> ourArray.push (я); <br> я ++; <br> } while (i &lt;5); </blockquote> Это ведет себя так же, как вы ожидали бы с любым другим типом цикла, и результирующий массив будет выглядеть как <code>[0, 1, 2, 3, 4]</code> . Однако то, что делает <code>do...while</code> отличается от других циклов, - это то, как оно ведет себя, когда условие не выполняется при первой проверке. Давайте посмотрим на это в действии. Вот регулярный цикл while, который будет запускать код в цикле, пока <code>i &lt; 5</code> . <blockquote> var ourArray = []; <br> var i = 5; <br> тогда как (i &lt;5) { <br> ourArray.push (я); <br> я ++; <br> } </blockquote> Обратите внимание, что мы инициализируем значение <code>i</code> равным 5. Когда мы выполняем следующую строку, мы замечаем, что <code>i</code> не меньше 5. Таким образом, мы не выполняем код внутри цикла. В результате <code>ourArray</code> будет добавлен к нему, поэтому он будет выглядеть так <code>[]</code> когда весь код в приведенном выше примере завершится. Теперь взгляните на цикл <code>do...while</code> while. <blockquote> var ourArray = []; <br> var i = 5; <br> делать { <br> ourArray.push (я); <br> я ++; <br> } while (i &lt;5); </blockquote> В этом случае мы инициализируем значение <code>i</code> как 5, как и в цикле while. Когда мы переходим к следующей строке, нет никакой проверки значения <code>i</code> , поэтому мы переходим к коду внутри фигурных скобок и выполняем его. Мы добавим один элемент в массив и увеличим <code>i</code> до того, как мы перейдем к проверке состояния. Затем, когда мы перейдем к проверке, если <code>i &lt; 5</code> видим, что <code>i</code> теперь 6, что не позволяет выполнить условную проверку. Итак, мы выходим из цикла и выполняем его. В конце приведенного выше примера значение <code>ourArray</code> равно <code>[5]</code> . По существу, цикл <code>do...while</code> while гарантирует, что код внутри цикла будет запускаться хотя бы один раз. Давайте попробуем <code>do...while</code> loop to work, нажав значения в массив.
</section>
## Instructions
<section id="instructions"> Измените <code>while</code> цикл в коде для <code>do...while</code> в <code>myArray</code> <code>i</code> <code>11</code> <code>do...while</code> петли так, чтобы петля будет толкать число 10 до <code>myArray</code> , и <code>i</code> буду равен <code>11</code> , когда ваш код завершения работы. </section>
<section id='instructions'>
Измените <code>while</code> цикл в коде для <code>do...while</code> в <code>myArray</code> <code>i</code> <code>11</code> <code>do...while</code> петли так, чтобы петля будет толкать число 10 до <code>myArray</code> , и <code>i</code> буду равен <code>11</code> , когда ваш код завершения работы.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: Вы должны использовать <code>do...while</code> loop для этого.
testString: 'assert(code.match(/do/g), "You should be using a <code>do...while</code> loop for this.");'
- text: '<code>myArray</code> должен равняться <code>[10]</code> .'
testString: 'assert.deepEqual(myArray, [10], "<code>myArray</code> should equal <code>[10]</code>.");'
- text: <code>i</code> должен равняться <code>11</code>
testString: 'assert.deepEqual(i, 11, "<code>i</code> should equal <code>11</code>");'
- text: You should be using a <code>do...while</code> loop for this exercise.
testString: assert(code.match(/do/g));
- text: <code>myArray</code> should equal <code>[10]</code>.
testString: assert.deepEqual(myArray, [10]);
- text: <code>i</code> should equal <code>11</code>
testString: assert.equal(i, 11);
```
@@ -38,8 +43,7 @@ tests:
var myArray = [];
var i = 10;
// Only change code below this line.
// Only change code below this line
while (i < 5) {
myArray.push(i);
i++;
@@ -49,12 +53,12 @@ while (i < 5) {
</div>
### After Test
### After Tests
<div id='js-teardown'>
```js
console.info('after the test');
if(typeof myArray !== "undefined"){(function(){return myArray;})();}
```
</div>
@@ -65,6 +69,12 @@ console.info('after the test');
<section id='solution'>
```js
// solution required
var myArray = [];
var i = 10;
do {
myArray.push(i);
i++;
} while (i < 5)
```
</section>

View File

@@ -2,25 +2,30 @@
id: cf1111c1c11feddfaeb5bdef
title: Iterate with JavaScript For Loops
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/c9yNVCe
forumTopicId: 18219
localeTitle: Итерация с JavaScript для циклов
---
## Description
<section id="description"> Вы можете запустить один и тот же код несколько раз, используя цикл. Наиболее распространенный тип цикла JavaScript называется « <code>for loop</code> », потому что он запускает «для» определенное количество раз. Для циклов объявляются три необязательных выражения, разделенные точкой с запятой: <code>for ([initialization]; [condition]; [final-expression])</code> Оператор <code>initialization</code> выполняется один раз только до начала цикла. Он обычно используется для определения и настройки вашей переменной цикла. Оператор <code>condition</code> оценивается в начале каждой итерации цикла и будет продолжаться до тех пор, пока он оценит значение <code>true</code> . Когда <code>condition</code> является <code>false</code> в начале итерации, цикл прекратит выполнение. Это означает, что если <code>condition</code> начинается как <code>false</code> , ваш цикл никогда не будет выполняться. <code>final-expression</code> выполняется в конце каждой итерации цикла до проверки следующего <code>condition</code> и обычно используется для увеличения или уменьшения вашего счетчика циклов. В следующем примере мы инициализируем с <code>i = 0</code> и итерацией, пока наше условие <code>i &lt; 5</code> истинно. Мы будем увеличивать <code>i</code> на <code>1</code> в каждой итерации цикла с <code>i++</code> качестве нашего <code>final-expression</code> . <blockquote> var ourArray = []; <br> для (var i = 0; i &lt;5; i ++) { <br> ourArray.push (я); <br> } </blockquote> <code>ourArray</code> будет содержать <code>[0,1,2,3,4]</code> . </section>
<section id='description'>
Вы можете запустить один и тот же код несколько раз, используя цикл. Наиболее распространенный тип цикла JavaScript называется « <code>for loop</code> », потому что он запускает «для» определенное количество раз. Для циклов объявляются три необязательных выражения, разделенные точкой с запятой: <code>for ([initialization]; [condition]; [final-expression])</code> Оператор <code>initialization</code> выполняется один раз только до начала цикла. Он обычно используется для определения и настройки вашей переменной цикла. Оператор <code>condition</code> оценивается в начале каждой итерации цикла и будет продолжаться до тех пор, пока он оценит значение <code>true</code> . Когда <code>condition</code> является <code>false</code> в начале итерации, цикл прекратит выполнение. Это означает, что если <code>condition</code> начинается как <code>false</code> , ваш цикл никогда не будет выполняться. <code>final-expression</code> выполняется в конце каждой итерации цикла до проверки следующего <code>condition</code> и обычно используется для увеличения или уменьшения вашего счетчика циклов. В следующем примере мы инициализируем с <code>i = 0</code> и итерацией, пока наше условие <code>i &lt; 5</code> истинно. Мы будем увеличивать <code>i</code> на <code>1</code> в каждой итерации цикла с <code>i++</code> качестве нашего <code>final-expression</code> . <blockquote> var ourArray = []; <br> для (var i = 0; i &lt;5; i ++) { <br> ourArray.push (я); <br> } </blockquote> <code>ourArray</code> будет содержать <code>[0,1,2,3,4]</code> .
</section>
## Instructions
<section id="instructions"> Используйте цикл <code>for</code> для работы, чтобы нажимать значения с 1 по 5 на <code>myArray</code> . </section>
<section id='instructions'>
Используйте цикл <code>for</code> для работы, чтобы нажимать значения с 1 по 5 на <code>myArray</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: Вы должны использовать <code>for</code> петли для этого.
testString: 'assert(code.match(/for\s*\(/g).length > 1, "You should be using a <code>for</code> loop for this.");'
- text: '<code>myArray</code> должен равняться <code>[1,2,3,4,5]</code> .'
testString: 'assert.deepEqual(myArray, [1,2,3,4,5], "<code>myArray</code> should equal <code>[1,2,3,4,5]</code>.");'
- text: You should be using a <code>for</code> loop for this.
testString: assert(code.match(/for\s*\(/g).length > 1);
- text: <code>myArray</code> should equal <code>[1,2,3,4,5]</code>.
testString: assert.deepEqual(myArray, [1,2,3,4,5]);
```
@@ -48,12 +53,12 @@ var myArray = [];
</div>
### After Test
### After Tests
<div id='js-teardown'>
```js
console.info('after the test');
if (typeof myArray !== "undefined"){(function(){return myArray;})();}
```
</div>
@@ -64,6 +69,14 @@ console.info('after the test');
<section id='solution'>
```js
// solution required
var ourArray = [];
for (var i = 0; i < 5; i++) {
ourArray.push(i);
}
var myArray = [];
for (var i = 1; i < 6; i++) {
myArray.push(i);
}
```
</section>

View File

@@ -2,25 +2,30 @@
id: cf1111c1c11feddfaeb1bdef
title: Iterate with JavaScript While Loops
challengeType: 1
videoUrl: ''
localeTitle: 'Итерации с помощью JavaScript, в то время как циклы'
videoUrl: https://scrimba.com/c/c8QbnCM
forumTopicId: 18220
localeTitle: Итерации с помощью JavaScript, в то время как циклы
---
## Description
<section id="description"> Вы можете запустить один и тот же код несколько раз, используя цикл. Первый тип цикла мы узнаем , что называется « в <code>while</code> » цикл , так как он работает « а» заданное условие истинно , и не остановится , как только это условие уже не так. <blockquote> var ourArray = []; <br> var i = 0; <br> тогда как (i &lt;5) { <br> ourArray.push (я); <br> я ++; <br> } </blockquote> Попробуем получить цикл while для работы, нажав значения в массив. </section>
<section id='description'>
Вы можете запустить один и тот же код несколько раз, используя цикл. Первый тип цикла мы узнаем , что называется « в <code>while</code> » цикл , так как он работает « а» заданное условие истинно , и не остановится , как только это условие уже не так. <blockquote> var ourArray = []; <br> var i = 0; <br> тогда как (i &lt;5) { <br> ourArray.push (я); <br> я ++; <br> } </blockquote> Попробуем получить цикл while для работы, нажав значения в массив.
</section>
## Instructions
<section id="instructions"> Нажмите цифры от 0 до 4 , чтобы <code>myArray</code> используя <code>while</code> цикл. </section>
<section id='instructions'>
Нажмите цифры от 0 до 4 , чтобы <code>myArray</code> используя <code>while</code> цикл.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: Вы должны использовать <code>while</code> петлю для этого.
testString: 'assert(code.match(/while/g), "You should be using a <code>while</code> loop for this.");'
- text: '<code>myArray</code> должен равняться <code>[0,1,2,3,4]</code> .'
testString: 'assert.deepEqual(myArray, [0,1,2,3,4], "<code>myArray</code> should equal <code>[0,1,2,3,4]</code>.");'
- text: You should be using a <code>while</code> loop for this.
testString: assert(code.match(/while/g));
- text: <code>myArray</code> should equal <code>[0,1,2,3,4]</code>.
testString: assert.deepEqual(myArray, [0,1,2,3,4]);
```
@@ -41,12 +46,12 @@ var myArray = [];
</div>
### After Test
### After Tests
<div id='js-teardown'>
```js
console.info('after the test');
if(typeof myArray !== "undefined"){(function(){return myArray;})();}
```
</div>
@@ -57,6 +62,12 @@ console.info('after the test');
<section id='solution'>
```js
// solution required
var myArray = [];
var i = 0;
while(i < 5) {
myArray.push(i);
i++;
}
```
</section>

View File

@@ -2,25 +2,30 @@
id: 56533eb9ac21ba0edf2244bf
title: Local Scope and Functions
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/cd62NhM
forumTopicId: 18227
localeTitle: Локальная область и функции
---
## Description
<section id="description"> Переменные, объявленные внутри функции, а также параметры функции имеют <dfn>локальную</dfn> область. Это означает, что они видны только внутри этой функции. Вот функция <code>myTest</code> с локальной переменной <code>loc</code> . <blockquote> function myTest () { <br> var loc = &quot;foo&quot;; <br> console.log (LOC); <br> } <br> MyTest (); // logs &quot;foo&quot; <br> console.log (LOC); // loc не определен </blockquote> <code>loc</code> не определяется вне функции. </section>
<section id='description'>
Переменные, объявленные внутри функции, а также параметры функции имеют <dfn>локальную</dfn> область. Это означает, что они видны только внутри этой функции. Вот функция <code>myTest</code> с локальной переменной <code>loc</code> . <blockquote> function myTest () { <br> var loc = &quot;foo&quot;; <br> console.log (LOC); <br> } <br> MyTest (); // logs &quot;foo&quot; <br> console.log (LOC); // loc не определен </blockquote> <code>loc</code> не определяется вне функции.
</section>
## Instructions
<section id="instructions"> Объявите локальную переменную <code>myVar</code> внутри <code>myLocalScope</code> . Запустите тесты, а затем следуйте инструкциям, прокомментированным в редакторе. <strong>намек</strong> <br> Обновление страницы может помочь, если вы застряли. </section>
<section id='instructions'>
Объявите локальную переменную <code>myVar</code> внутри <code>myLocalScope</code> . Запустите тесты, а затем следуйте инструкциям, прокомментированным в редакторе. <strong>намек</strong> <br> Обновление страницы может помочь, если вы застряли.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: Глобальная переменная <code>myVar</code>
testString: 'assert(typeof myVar === "undefined", "No global <code>myVar</code> variable");'
- text: Добавьте локальную переменную <code>myVar</code>
testString: 'assert(/var\s+myVar/.test(code), "Add a local <code>myVar</code> variable");'
- text: No global <code>myVar</code> variable
testString: assert(typeof myVar === 'undefined');
- text: Add a local <code>myVar</code> variable
testString: assert(/function\s+myLocalScope\s*\(\s*\)\s*\{\s[\s\S]+\s*var\s*myVar\s*(\s*|=[\s\S]+)\s*;[\s\S]+}/.test(code));
```
@@ -49,7 +54,7 @@ console.log(myVar);
</div>
### Before Test
### Before Tests
<div id='js-setup'>
```js
@@ -76,11 +81,13 @@ function uncapture() {
</div>
### After Test
### After Tests
<div id='js-teardown'>
```js
console.info('after the test');
typeof myLocalScope === 'function' && (capture(), myLocalScope(), uncapture());
(function() { return logOutput || "console.log never called"; })();
```
</div>
@@ -91,6 +98,13 @@ console.info('after the test');
<section id='solution'>
```js
// solution required
function myLocalScope() {
'use strict';
var myVar;
console.log(myVar);
}
myLocalScope();
```
</section>

View File

@@ -2,27 +2,32 @@
id: 5690307fddb111c6084545d7
title: Logical Order in If Else Statements
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/cwNvMUV
forumTopicId: 18228
localeTitle: Логический порядок в остальных случаях
---
## Description
<section id="description"> Порядок важен в <code>if</code> , <code>else if</code> . Функция выполняется сверху вниз, поэтому вы хотите быть осторожным с тем, что должно быть сделано первым. Возьмем эти две функции в качестве примера. Вот первый: <blockquote> функция foo (x) { <br> если (x &lt;1) { <br> return «Меньше одного»; <br> } else if (x &lt;2) { <br> return «Меньше двух»; <br> } else { <br> return «Больше или равно двум»; <br> } <br> } </blockquote> А второй просто переключает порядок утверждений: <blockquote> функциональная панель (x) { <br> если (x &lt;2) { <br> return «Меньше двух»; <br> } else if (x &lt;1) { <br> return «Меньше одного»; <br> } else { <br> return «Больше или равно двум»; <br> } <br> } </blockquote> Хотя эти две функции выглядят почти одинаковыми, если мы передаем число для обоих, мы получаем разные выходы. <blockquote> foo (0) // «Меньше одного» <br> bar (0) // «Менее двух» </blockquote></section>
<section id='description'>
Порядок важен в <code>if</code> , <code>else if</code> . Функция выполняется сверху вниз, поэтому вы хотите быть осторожным с тем, что должно быть сделано первым. Возьмем эти две функции в качестве примера. Вот первый: <blockquote> функция foo (x) { <br> если (x &lt;1) { <br> return «Меньше одного»; <br> } else if (x &lt;2) { <br> return «Меньше двух»; <br> } else { <br> return «Больше или равно двум»; <br> } <br> } </blockquote> А второй просто переключает порядок утверждений: <blockquote> функциональная панель (x) { <br> если (x &lt;2) { <br> return «Меньше двух»; <br> } else if (x &lt;1) { <br> return «Меньше одного»; <br> } else { <br> return «Больше или равно двум»; <br> } <br> } </blockquote> Хотя эти две функции выглядят почти одинаковыми, если мы передаем число для обоих, мы получаем разные выходы. <blockquote> foo (0) // «Меньше одного» <br> bar (0) // «Менее двух» </blockquote>
</section>
## Instructions
<section id="instructions"> Измените порядок логики в функции так, чтобы она вернула правильные утверждения во всех случаях. </section>
<section id='instructions'>
Измените порядок логики в функции так, чтобы она вернула правильные утверждения во всех случаях.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>orderMyLogic(4)</code> должен возвращать «Менее 5»
testString: 'assert(orderMyLogic(4) === "Less than 5", "<code>orderMyLogic(4)</code> should return "Less than 5"");'
- text: '<code>orderMyLogic(6)</code> должен вернуть «Менее 10»,'
testString: 'assert(orderMyLogic(6) === "Less than 10", "<code>orderMyLogic(6)</code> should return "Less than 10"");'
- text: '<code>orderMyLogic(11)</code> должен возвращать «Больше или равно 10»,'
testString: 'assert(orderMyLogic(11) === "Greater than or equal to 10", "<code>orderMyLogic(11)</code> should return "Greater than or equal to 10"");'
- text: <code>orderMyLogic(4)</code> should return "Less than 5"
testString: assert(orderMyLogic(4) === "Less than 5");
- text: <code>orderMyLogic(6)</code> should return "Less than 10"
testString: assert(orderMyLogic(6) === "Less than 10");
- text: <code>orderMyLogic(11)</code> should return "Greater than or equal to 10"
testString: assert(orderMyLogic(11) === "Greater than or equal to 10");
```
@@ -51,14 +56,21 @@ orderMyLogic(7);
</div>
</section>
## Solution
<section id='solution'>
```js
// solution required
function orderMyLogic(val) {
if(val < 5) {
return "Less than 5";
} else if (val < 10) {
return "Less than 10";
} else {
return "Greater than or equal to 10";
}
}
```
</section>

View File

@@ -2,27 +2,32 @@
id: 56bbb991ad1ed5201cd392cc
title: Manipulate Arrays With pop()
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/cRbVZAB
forumTopicId: 18236
localeTitle: Манипулировать массивами С помощью pop ()
---
## Description
<section id="description"> Другой способ изменить данные в массиве - с помощью функции <code>.pop()</code> . <code>.pop()</code> используется для « <code>.pop()</code> » значения из конца массива. Мы можем сохранить это значение «выскочил», присвоив его переменной. Другими словами, <code>.pop()</code> удаляет последний элемент из массива и возвращает этот элемент. Любой тип записи можно «выскочить» из массива - числа, строки, даже вложенные массивы. <blockquote> <code>var threeArr = [1, 4, 6]; <br> var oneDown = threeArr.pop(); <br> console.log(oneDown); // Returns 6 <br> console.log(threeArr); // Returns [1, 4]</code> </blockquote> </section>
<section id='description'>
Другой способ изменить данные в массиве - с помощью функции <code>.pop()</code> . <code>.pop()</code> используется для « <code>.pop()</code> » значения из конца массива. Мы можем сохранить это значение «выскочил», присвоив его переменной. Другими словами, <code>.pop()</code> удаляет последний элемент из массива и возвращает этот элемент. Любой тип записи можно «выскочить» из массива - числа, строки, даже вложенные массивы. <blockquote> <code>var threeArr = [1, 4, 6]; <br> var oneDown = threeArr.pop(); <br> console.log(oneDown); // Returns 6 <br> console.log(threeArr); // Returns [1, 4]</code> </blockquote>
</section>
## Instructions
<section id="instructions"> Используйте <code>.pop()</code> чтобы удалить последний элемент из <code>myArray</code> , назначив значение «popped off» для <code>removedFromMyArray</code> . </section>
<section id='instructions'>
Используйте <code>.pop()</code> чтобы удалить последний элемент из <code>myArray</code> , назначив значение «popped off» для <code>removedFromMyArray</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: '<code>myArray</code> должен содержать только <code>[[&quot;John&quot;, 23]]</code> .'
testString: 'assert((function(d){if(d[0][0] == "John" && d[0][1] === 23 && d[1] == undefined){return true;}else{return false;}})(myArray), "<code>myArray</code> should only contain <code>[["John", 23]]</code>.");'
- text: Использовать <code>pop()</code> на <code>myArray</code>
testString: 'assert(/removedFromMyArray\s*=\s*myArray\s*.\s*pop\s*(\s*)/.test(code), "Use <code>pop()</code> on <code>myArray</code>");'
- text: '<code>removedFromMyArray</code> должен содержать только <code>[&quot;cat&quot;, 2]</code> .'
testString: 'assert((function(d){if(d[0] == "cat" && d[1] === 2 && d[2] == undefined){return true;}else{return false;}})(removedFromMyArray), "<code>removedFromMyArray</code> should only contain <code>["cat", 2]</code>.");'
- text: <code>myArray</code> should only contain <code>[["John", 23]]</code>.
testString: assert((function(d){if(d[0][0] == 'John' && d[0][1] === 23 && d[1] == undefined){return true;}else{return false;}})(myArray));
- text: Use <code>pop()</code> on <code>myArray</code>
testString: assert(/removedFromMyArray\s*=\s*myArray\s*.\s*pop\s*(\s*)/.test(code));
- text: <code>removedFromMyArray</code> should only contain <code>["cat", 2]</code>.
testString: assert((function(d){if(d[0] == 'cat' && d[1] === 2 && d[2] == undefined){return true;}else{return false;}})(removedFromMyArray));
```
@@ -49,12 +54,12 @@ var removedFromMyArray;
</div>
### After Test
### After Tests
<div id='js-teardown'>
```js
console.info('after the test');
(function(y, z){return 'myArray = ' + JSON.stringify(y) + ' & removedFromMyArray = ' + JSON.stringify(z);})(myArray, removedFromMyArray);
```
</div>
@@ -65,6 +70,8 @@ console.info('after the test');
<section id='solution'>
```js
// solution required
var myArray = [["John", 23], ["cat", 2]];
var removedFromMyArray = myArray.pop();
```
</section>

View File

@@ -2,23 +2,28 @@
id: 56bbb991ad1ed5201cd392cb
title: Manipulate Arrays With push()
challengeType: 1
videoUrl: ''
videoUrl: https://scrimba.com/c/cnqmVtJ
forumTopicId: 18237
localeTitle: Манипулировать массивами С помощью push ()
---
## Description
<section id="description"> Простым способом добавления данных в конец массива является функция <code>push()</code> . <code>.push()</code> принимает один или несколько <dfn>параметров</dfn> и «нажимает» их на конец массива. <blockquote> var arr = [1,2,3]; <br> arr.push (4); <br> // arr теперь [1,2,3,4] </blockquote></section>
<section id='description'>
Простым способом добавления данных в конец массива является функция <code>push()</code> . <code>.push()</code> принимает один или несколько <dfn>параметров</dfn> и «нажимает» их на конец массива. <blockquote> var arr = [1,2,3]; <br> arr.push (4); <br> // arr теперь [1,2,3,4] </blockquote>
</section>
## Instructions
<section id="instructions"> Нажмите <code>[&quot;dog&quot;, 3]</code> на конец переменной <code>myArray</code> . </section>
<section id='instructions'>
Нажмите <code>[&quot;dog&quot;, 3]</code> на конец переменной <code>myArray</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: '<code>myArray</code> должен теперь равняться <code>[[&quot;John&quot;, 23], [&quot;cat&quot;, 2], [&quot;dog&quot;, 3]]</code> .'
testString: 'assert((function(d){if(d[2] != undefined && d[0][0] == "John" && d[0][1] === 23 && d[2][0] == "dog" && d[2][1] === 3 && d[2].length == 2){return true;}else{return false;}})(myArray), "<code>myArray</code> should now equal <code>[["John", 23], ["cat", 2], ["dog", 3]]</code>.");'
- text: <code>myArray</code> should now equal <code>[["John", 23], ["cat", 2], ["dog", 3]]</code>.
testString: assert((function(d){if(d[2] != undefined && d[0][0] == 'John' && d[0][1] === 23 && d[2][0] == 'dog' && d[2][1] === 3 && d[2].length == 2){return true;}else{return false;}})(myArray));
```
@@ -44,12 +49,12 @@ var myArray = [["John", 23], ["cat", 2]];
</div>
### After Test
### After Tests
<div id='js-teardown'>
```js
console.info('after the test');
(function(z){return 'myArray = ' + JSON.stringify(z);})(myArray);
```
</div>
@@ -60,6 +65,8 @@ console.info('after the test');
<section id='solution'>
```js
// solution required
var myArray = [["John", 23], ["cat", 2]];
myArray.push(["dog",3]);
```
</section>

Some files were not shown because too many files have changed in this diff Show More