docs: add Spanish docs

This commit is contained in:
Beau Carnes
2018-10-08 13:34:43 -04:00
parent 46d8d61776
commit fcced4a6c3
912 changed files with 80339 additions and 171 deletions

View File

@ -0,0 +1,77 @@
---
id: 56bbb991ad1ed5201cd392ca
title: Access Array Data with Indexes
localeTitle: Acceso a datos de matriz con índices
challengeType: 1
guideUrl: 'https://spanish.freecodecamp.org/guide/certificates/access-array-data-with-indexes'
---
## Description
<section id='description'>
Podemos acceder a los datos dentro de las matrices utilizando <code>indexes</code> .
índices de matriz se escriben en la misma notación de corchete que usan las cadenas, excepto que en lugar de especificar un carácter, están especificando una entrada en la matriz. Al igual que las cadenas, las matrices utilizan indización <dfn>basada en cero</dfn> , por lo que el primer elemento de una matriz es el elemento <code>0</code> .
<strong>Ejemplo</strong>
<blockquote>var array = [50,60,70];<br>array[0]; // equals 50<br>var data = array[1]; // equals 60</blockquote>
<strong>Nota</strong> <br> No debe haber espacios entre el nombre de la matriz y los corchetes, como la <code>array [0]</code> . Aunque JavaScript puede procesar esto correctamente, esto puede confundir a otros programadores que leen su código.
</section>
## Instructions
<section id='instructions'>
Cree una variable llamada <code>myData</code> y <code>myArray</code> para que sea igual al primer valor de <code>myArray</code> usando notación de corchete.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: La variable <code>myData</code> debe ser igual al primer valor de <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: Se debe acceder a los datos en la variable <code>myArray</code> usando notación de corchetes.
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.");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
// Example
var ourArray = [50,60,70];
var ourData = ourArray[0]; // equals 50
// Setup
var myArray = [50,60,70];
// Only change code below this line.
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
var myArray = [50,60,70];
var myData = myArray[0];
```
</section>

View File

@ -0,0 +1,73 @@
---
id: 56592a60ddddeae28f7aa8e1
title: Access Multi-Dimensional Arrays With Indexes
localeTitle: Acceder a matrices multidimensionales con índices
challengeType: 1
guideUrl: 'https://spanish.freecodecamp.org/guide/certificates/access-array-data-with-indexes'
---
## Description
<section id='description'>
Una forma de pensar en una matriz <dfn>multidimensional</dfn> es como una <em>matriz de matrices</em> . Cuando usa corchetes para acceder a su matriz, el primer conjunto de corchetes se refiere a las entradas en la matriz más externa (el primer nivel), y cada par adicional de corchetes se refiere al siguiente nivel de entradas adentro.
<strong>Ejemplo</strong>
<blockquote>var arr = [<br>&nbsp;&nbsp;[1,2,3],<br>&nbsp;&nbsp;[4,5,6],<br>&nbsp;&nbsp;[7,8,9],<br>&nbsp;&nbsp;[[10,11,12], 13, 14]<br>];<br>arr[3]; // equals [[10,11,12], 13, 14]<br>arr[3][0]; // equals [10,11,12]<br>arr[3][0][1]; // equals 11</blockquote>
<strong>Nota</strong> <br> No debe haber espacios entre el nombre de la matriz y los corchetes, como la <code>array [0][0]</code> e incluso esta <code>array [0] [0]</code> no está permitida. Aunque JavaScript puede procesar esto correctamente, esto puede confundir a otros programadores que leen su código.
</section>
## Instructions
<section id='instructions'>
Usando la notación de corchetes, seleccione un elemento de <code>myArray</code> para que <code>myData</code> sea igual a <code>8</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>myData</code> debe ser igual a <code>8</code> .
testString: 'assert(myData === 8, "<code>myData</code> should be equal to <code>8</code>.");'
- text: Debe usar la notación de corchetes para leer el valor correcto de <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>.");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
// Setup
var myArray = [[1,2,3], [4,5,6], [7,8,9], [[10,11,12], 13, 14]];
// Only change code below this line.
var myData = myArray[0][0];
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
var myArray = [[1,2,3],[4,5,6], [7,8,9], [[10,11,12], 13, 14]];
var myData = myArray[2][1];
```
</section>

View File

@ -0,0 +1,110 @@
---
id: 56533eb9ac21ba0edf2244cd
title: Accessing Nested Arrays
localeTitle: Acceso a matrices anidadas
challengeType: 1
guideUrl: 'https://spanish.freecodecamp.org/guide/certificates/access-array-data-with-indexes'
---
## Description
<section id='description'>
Como hemos visto en ejemplos anteriores, los objetos pueden contener tanto objetos anidados como matrices anidadas. Al igual que para acceder a objetos anidados, la notación de paréntesis de arrays se puede encadenar para acceder a arrays anidados.
Aquí hay un ejemplo de cómo acceder a una matriz anidada:
<blockquote>var ourPets = [<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;animalType: "cat",<br>&nbsp;&nbsp;&nbsp;&nbsp;names: [<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Meowzer",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Fluffy",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Kit-Cat"<br>&nbsp;&nbsp;&nbsp;&nbsp;]<br>&nbsp;&nbsp;},<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;animalType: "dog",<br>&nbsp;&nbsp;&nbsp;&nbsp;names: [<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Spot",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Bowser",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Frankie"<br>&nbsp;&nbsp;&nbsp;&nbsp;]<br>&nbsp;&nbsp;}<br>];<br>ourPets[0].names[1]; // "Fluffy"<br>ourPets[1].names[0]; // "Spot"</blockquote>
</section>
## Instructions
<section id='instructions'>
Recupere el segundo árbol de la variable <code>myPlants</code> usando el punto de objeto y la notación de corchete de matriz.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>secondTree</code> debe ser igual a &quot;pino&quot;
testString: 'assert(secondTree === "pine", "<code>secondTree</code> should equal "pine"");'
- text: Use la notación de puntos y corchetes para acceder a <code>myPlants</code>
testString: 'assert(/=\s*myPlants\[1\].list\[1\]/.test(code), "Use dot and bracket notation to access <code>myPlants</code>");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
// Setup
var myPlants = [
{
type: "flowers",
list: [
"rose",
"tulip",
"dandelion"
]
},
{
type: "trees",
list: [
"fir",
"pine",
"birch"
]
}
];
// Only change code below this line
var secondTree = ""; // Change this line
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
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

@ -0,0 +1,91 @@
---
id: 56533eb9ac21ba0edf2244cc
title: Accessing Nested Objects
localeTitle: Accediendo a objetos anidados
challengeType: 1
guideUrl: 'https://spanish.freecodecamp.org/guide/certificates/accessing-nested-objects-in-json'
---
## Description
<section id='description'>
Se puede acceder a las sub-propiedades de los objetos encadenando la notación de punto o corchete.
Aquí hay un objeto anidado:
<blockquote>var ourStorage = {<br>&nbsp;&nbsp;"desk": {<br>&nbsp;&nbsp;&nbsp;&nbsp;"drawer": "stapler"<br>&nbsp;&nbsp;},<br>&nbsp;&nbsp;"cabinet": {<br>&nbsp;&nbsp;&nbsp;&nbsp;"top drawer": { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"folder1": "a file",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"folder2": "secrets"<br>&nbsp;&nbsp;&nbsp;&nbsp;},<br>&nbsp;&nbsp;&nbsp;&nbsp;"bottom drawer": "soda"<br>&nbsp;&nbsp;}<br>};<br>ourStorage.cabinet["top drawer"].folder2; // "secrets"<br>ourStorage.desk.drawer; // "stapler"</blockquote>
</section>
## Instructions
<section id='instructions'>
Acceda al objeto <code>myStorage</code> y asigne el contenido de la propiedad de la <code>glove box</code> a la variable <code>gloveBoxContents</code> . Utilice la notación de corchete para las propiedades con un espacio en su nombre.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>gloveBoxContents</code> debe ser igual a &quot;mapas&quot;
testString: 'assert(gloveBoxContents === "maps", "<code>gloveBoxContents</code> should equal "maps"");'
- text: Usa la notación de puntos y corchetes para acceder a <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>");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
// Setup
var myStorage = {
"car": {
"inside": {
"glove box": "maps",
"passenger seat": "crumbs"
},
"outside": {
"trunk": "jack"
}
}
};
var gloveBoxContents = undefined; // Change this line
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
var myStorage = {
"car":{
"inside":{
"glove box":"maps",
"passenger seat":"crumbs"
},
"outside":{
"trunk":"jack"
}
}
};
var gloveBoxContents = myStorage.car.inside["glove box"];
```
</section>

View File

@ -0,0 +1,90 @@
---
id: 56533eb9ac21ba0edf2244c8
title: Accessing Object Properties with Bracket Notation
localeTitle: Acceso a las propiedades del objeto con notación de corchete
challengeType: 1
guideUrl: 'https://spanish.freecodecamp.org/guide/certificates/accessing-objects-properties-with-bracket-notation'
---
## Description
<section id='description'>
La segunda forma de acceder a las propiedades de un objeto es la notación de corchetes ( <code>[]</code> ). Si la propiedad del objeto al que intenta acceder tiene un espacio en su nombre, deberá utilizar la notación de corchetes.
Sin embargo, aún puede usar la notación de corchete en las propiedades del objeto sin espacios.
Aquí hay una muestra del uso de la notación de corchetes para leer la propiedad de un objeto:
<blockquote>var myObj = {<br>&nbsp;&nbsp;"Space Name": "Kirk",<br>&nbsp;&nbsp;"More Space": "Spock",<br>&nbsp;&nbsp;"NoSpace": "USS Enterprise"<br>};<br>myObj["Space Name"]; // Kirk<br>myObj['More Space']; // Spock<br>myObj["NoSpace"]; // USS Enterprise</blockquote>
Tenga en cuenta que los nombres de propiedades con espacios en ellos deben estar entre comillas (simple o doble).
</section>
## Instructions
<section id='instructions'>
Lea los valores de las propiedades <code>&quot;an entree&quot;</code> y <code>&quot;the drink&quot;</code> de <code>testObj</code> utilizando la notación de corchetes y asignarlos a <code>entreeValue</code> y <code>drinkValue</code> respectivamente.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>entreeValue</code> debe ser una cadena
testString: 'assert(typeof entreeValue === "string" , "<code>entreeValue</code> should be a string");'
- text: El valor de <code>entreeValue</code> debe ser <code>&quot;hamburger&quot;</code>
testString: 'assert(entreeValue === "hamburger" , "The value of <code>entreeValue</code> should be <code>"hamburger"</code>");'
- text: <code>drinkValue</code> debe ser una cadena
testString: 'assert(typeof drinkValue === "string" , "<code>drinkValue</code> should be a string");'
- text: El valor de <code>drinkValue</code> debe ser <code>&quot;water&quot;</code>
testString: 'assert(drinkValue === "water" , "The value of <code>drinkValue</code> should be <code>"water"</code>");'
- text: Usted debe usar la notación de soporte dos veces
testString: 'assert(code.match(/testObj\s*?\[("|")[^""]+\1\]/g).length > 1, "You should use bracket notation twice");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
// Setup
var testObj = {
"an entree": "hamburger",
"my side": "veggies",
"the drink": "water"
};
// Only change code below this line
var entreeValue = testObj; // Change this line
var drinkValue = testObj; // Change this line
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
var testObj = {
"an entree": "hamburger",
"my side": "veggies",
"the drink": "water"
};
var entreeValue = testObj["an entree"];
var drinkValue = testObj['the drink'];
```
</section>

View File

@ -0,0 +1,89 @@
---
id: 56533eb9ac21ba0edf2244c7
title: Accessing Object Properties with Dot Notation
localeTitle: Acceso a las propiedades del objeto con notación de puntos
challengeType: 1
---
## Description
<section id='description'>
Hay dos formas de acceder a las propiedades de un objeto: notación de puntos ( <code>.</code> ) Y notación de corchetes ( <code>[]</code> ), similar a una matriz.
notación de puntos es lo que usa cuando conoce el nombre de la propiedad a la que intenta acceder con anticipación.
Aquí hay una muestra de cómo usar la notación de puntos ( <code>.</code> ) Para leer la propiedad de un objeto:
<blockquote>var myObj = {<br>&nbsp;&nbsp;prop1: "val1",<br>&nbsp;&nbsp;prop2: "val2"<br>};<br>var prop1val = myObj.prop1; // val1<br>var prop2val = myObj.prop2; // val2</blockquote>
</section>
## Instructions
<section id='instructions'>
Lea los valores de propiedad de <code>testObj</code> usando la notación de puntos. Establezca la variable <code>hatValue</code> igual al <code>hat</code> propiedad del objeto y establezca la variable <code>shirtValue</code> igual a la <code>shirt</code> propiedad del objeto.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>hatValue</code> debe ser una cadena
testString: 'assert(typeof hatValue === "string" , "<code>hatValue</code> should be a string");'
- text: El valor de <code>hatValue</code> debe ser <code>&quot;ballcap&quot;</code>
testString: 'assert(hatValue === "ballcap" , "The value of <code>hatValue</code> should be <code>"ballcap"</code>");'
- text: <code>shirtValue</code> debe ser una cadena
testString: 'assert(typeof shirtValue === "string" , "<code>shirtValue</code> should be a string");'
- text: El valor de <code>shirtValue</code> debe ser <code>&quot;jersey&quot;</code>
testString: 'assert(shirtValue === "jersey" , "The value of <code>shirtValue</code> should be <code>"jersey"</code>");'
- text: Deberías usar la notación de puntos dos veces.
testString: 'assert(code.match(/testObj\.\w+/g).length > 1, "You should use dot notation twice");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
// Setup
var testObj = {
"hat": "ballcap",
"shirt": "jersey",
"shoes": "cleats"
};
// Only change code below this line
var hatValue = testObj; // Change this line
var shirtValue = testObj; // Change this line
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
var testObj = {
"hat": "ballcap",
"shirt": "jersey",
"shoes": "cleats"
};
var hatValue = testObj.hat;
var shirtValue = testObj.shirt;
```
</section>

View File

@ -0,0 +1,95 @@
---
id: 56533eb9ac21ba0edf2244c9
title: Accessing Object Properties with Variables
localeTitle: Accediendo a las propiedades del objeto con variables
challengeType: 1
guideUrl: 'https://spanish.freecodecamp.org/guide/certificates/accessing-objects-properties-with-variables'
---
## Description
<section id='description'>
Otro uso de la notación de corchetes en los objetos es acceder a una propiedad que se almacena como el valor de una variable. Esto puede ser muy útil para iterar a través de las propiedades de un objeto o al acceder a una tabla de búsqueda.
Aquí hay un ejemplo del uso de una variable para acceder a una propiedad:
<blockquote>var dogs = {<br>&nbsp;&nbsp;Fido: "Mutt",
Hunter: "Doberman",
Snoopie: "Beagle"<br>};<br>var myDog = "Hunter";<br>var myBreed = dogs[myDog];<br>console.log(myBreed); // "Doberman"</blockquote>
Otra forma en que puede usar este concepto es cuando el nombre de la propiedad se recopila dinámicamente durante la ejecución del programa, de la siguiente manera:
<blockquote>var someObj = {<br>&nbsp;&nbsp;propName: "John"<br>};<br>function propPrefix(str) {<br>&nbsp;&nbsp;var s = "prop";<br>&nbsp;&nbsp;return s + str;<br>}<br>var someProp = propPrefix("Name"); // someProp now holds the value 'propName'<br>console.log(someObj[someProp]); // "John"</blockquote>
Tenga en cuenta que <em>no</em> usamos comillas alrededor del nombre de la variable cuando la usamos para acceder a la propiedad porque estamos usando el <em>valor</em> de la variable, no el <em>nombre</em> .
</section>
## Instructions
<section id='instructions'>
Use la variable <code>playerNumber</code> para buscar el jugador <code>16</code> en <code>testObj</code> usando la notación de corchete. Luego asigna ese nombre a la variable del <code>player</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>playerNumber</code> debería ser un número
testString: 'assert(typeof playerNumber === "number", "<code>playerNumber</code> should be a number");'
- text: El <code>player</code> variable debe ser una cadena.
testString: 'assert(typeof player === "string", "The variable <code>player</code> should be a string");'
- text: El valor del <code>player</code> debe ser &quot;Montana&quot;.
testString: 'assert(player === "Montana", "The value of <code>player</code> should be "Montana"");'
- text: Debe usar la notación de corchetes para acceder a <code>testObj</code>
testString: 'assert(/testObj\s*?\[.*?\]/.test(code),"You should use bracket notation to access <code>testObj</code>");'
- text: No debes asignar el valor <code>Montana</code> al <code>player</code> variable directamente.
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: Debería usar la variable <code>playerNumber</code> en su notación de corchete
testString: 'assert(/testObj\s*?\[\s*playerNumber\s*\]/.test(code),"You should be using the variable <code>playerNumber</code> in your bracket notation");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
// Setup
var testObj = {
12: "Namath",
16: "Montana",
19: "Unitas"
};
// Only change code below this line;
var playerNumber; // Change this Line
var player = testObj; // Change this Line
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
var testObj = {
12: "Namath",
16: "Montana",
19: "Unitas"
};
var playerNumber = 16;
var player = testObj[playerNumber];
```
</section>

View File

@ -0,0 +1,93 @@
---
id: 56bbb991ad1ed5201cd392d2
title: Add New Properties to a JavaScript Object
localeTitle: Agregar nuevas propiedades a un objeto de JavaScript
challengeType: 1
---
## Description
<section id='description'>
Puede agregar nuevas propiedades a los objetos JavaScript existentes de la misma manera que los modificaría.
Así es como agregaríamos una propiedad de <code>&quot;bark&quot;</code> a <code>ourDog</code> :
<code>ourDog.bark = &quot;bow-wow&quot;;</code>
o
<code>ourDog[&quot;bark&quot;] = &quot;bow-wow&quot;;</code>
Ahora, cuando evaluamos <code>ourDog.bark</code> , obtendremos su ladrido, &quot;bow-wow&quot;.
</section>
## Instructions
<section id='instructions'>
Agrega una propiedad de <code>&quot;bark&quot;</code> a <code>myDog</code> y <code>myDog</code> con un sonido de perro, como &quot;woof&quot;. Puede usar la notación de punto o corchete.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: Agregue la propiedad <code>&quot;bark&quot;</code> a <code>myDog</code> .
testString: 'assert(myDog.bark !== undefined, "Add the property <code>"bark"</code> to <code>myDog</code>.");'
- text: No agregue <code>&quot;bark&quot;</code> a la sección de configuración
testString: 'assert(!/bark[^\n]:/.test(code), "Do not add <code>"bark"</code> to the setup section");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
// Example
var ourDog = {
"name": "Camper",
"legs": 4,
"tails": 1,
"friends": ["everything!"]
};
ourDog.bark = "bow-wow";
// Setup
var myDog = {
"name": "Happy Coder",
"legs": 4,
"tails": 1,
"friends": ["freeCodeCamp Campers"]
};
// Only change code below this line.
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
var myDog = {
"name": "Happy Coder",
"legs": 4,
"tails": 1,
"friends": ["freeCodeCamp Campers"]
};
myDog.bark = "Woof Woof";
```
</section>

View File

@ -0,0 +1,68 @@
---
id: cf1111c1c11feddfaeb3bdef
title: Add Two Numbers with JavaScript
localeTitle: Añadir dos números con JavaScript
challengeType: 1
---
## Description
<section id='description'>
<code>Number</code> es un tipo de datos en JavaScript que representa datos numéricos.
Ahora vamos a tratar de sumar dos números usando JavaScript.
JavaScript usa el símbolo <code>+</code> como operación de suma cuando se coloca entre dos números.
<strong>Ejemplo</strong>
<blockquote>myVar = 5 + 10; // assigned 15</blockquote>
</section>
## Instructions
<section id='instructions'>
Cambia el <code>0</code> para que la suma sea igual a <code>20</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>sum</code> debe ser igual a <code>20</code>
testString: 'assert(sum === 20, "<code>sum</code> should equal <code>20</code>");'
- text: Usa el operador <code>+</code>
testString: 'assert(/\+/.test(code), "Use the <code>+</code> operator");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
var sum = 10 + 0;
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
var sum = 10 + 10;
```
</section>

View File

@ -0,0 +1,99 @@
---
id: 56533eb9ac21ba0edf2244de
title: Adding a Default Option in Switch Statements
localeTitle: Adición de una opción predeterminada en los estados de cambio
challengeType: 1
guideUrl: 'https://spanish.freecodecamp.org/guide/certificates/adding-a-default-option-in-switch-statements'
---
## Description
<section id='description'>
En una declaración de <code>switch</code> , es posible que no pueda especificar todos los valores posibles como declaraciones de <code>case</code> . En su lugar, puede agregar la declaración <code>default</code> que se ejecutará si no se encuentran declaraciones de <code>case</code> coincidentes. Piense en ello como la última instrucción <code>else</code> en una cadena <code>if/else</code> .
Una declaración por <code>default</code> debe ser el último caso.
<blockquote>switch (num) {<br>&nbsp;&nbsp;case value1:<br>&nbsp;&nbsp;&nbsp;&nbsp;statement1;<br>&nbsp;&nbsp;&nbsp;&nbsp;break;<br>&nbsp;&nbsp;case value2:<br>&nbsp;&nbsp;&nbsp;&nbsp;statement2;<br>&nbsp;&nbsp;&nbsp;&nbsp;break;<br>...<br>&nbsp;&nbsp;default:<br>&nbsp;&nbsp;&nbsp;&nbsp;defaultStatement;<br>&nbsp;&nbsp;&nbsp;&nbsp;break;<br>}</blockquote>
</section>
## Instructions
<section id='instructions'>
Escriba una instrucción de cambio para establecer la <code>answer</code> para las siguientes condiciones: <br> <code>&quot;a&quot;</code> - &quot;manzana&quot; <br> <code>&quot;b&quot;</code> - &quot;pájaro&quot; <br> <code>&quot;c&quot;</code> - &quot;gato&quot; <br> <code>default</code> - &quot;cosas&quot;
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>switchOfStuff(&quot;a&quot;)</code> debe tener un valor de &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> debe tener un valor de &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> debe tener un valor de &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> debe tener un valor de &quot;cosas&quot;
testString: 'assert(switchOfStuff("d") === "stuff", "<code>switchOfStuff("d")</code> should have a value of "stuff"");'
- text: <code>switchOfStuff(4)</code> debe tener un valor de &quot;cosas&quot;
testString: 'assert(switchOfStuff(4) === "stuff", "<code>switchOfStuff(4)</code> should have a value of "stuff"");'
- text: No debes usar ninguna declaración <code>if</code> o <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: Debes usar una declaración por <code>default</code>
testString: 'assert(switchOfStuff("string-to-trigger-default-case") === "stuff", "You should use a <code>default</code> statement");'
- text: Debe tener al menos 3 declaraciones de <code>break</code>
testString: 'assert(code.match(/break/g).length > 2, "You should have at least 3 <code>break</code> statements");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
function switchOfStuff(val) {
var answer = "";
// Only change code below this line
// Only change code above this line
return answer;
}
// Change this value to test
switchOfStuff(1);
```
</div>
</section>
## Solution
<section id='solution'>
```js
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

@ -0,0 +1,79 @@
---
id: 56533eb9ac21ba0edf2244ed
title: Appending Variables to Strings
localeTitle: Anexando Variables a las Cadenas
challengeType: 1
guideUrl: 'https://spanish.freecodecamp.org/guide/certificates/appending-variables-to-strings'
---
## Description
<section id='description'>
Al igual que podemos construir una cadena sobre varias líneas a partir de <dfn>literales</dfn> de cadena, también podemos agregar variables a una cadena usando el operador más es igual a ( <code>+=</code> ).
</section>
## Instructions
<section id='instructions'>
Establezca <code>someAdjective</code> y <code>someAdjective</code> a <code>myStr</code> usando el operador <code>+=</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>someAdjective</code> debe establecerse en una cadena de al menos 3 caracteres de largo
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> de <code>someAdjective</code> a <code>myStr</code> usando el operador <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");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
// Example
var anAdjective = "awesome!";
var ourStr = "freeCodeCamp is ";
ourStr += anAdjective;
// Only change code below this line
var someAdjective;
var myStr = "Learning to code is ";
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
var anAdjective = "awesome!";
var ourStr = "freeCodeCamp is ";
ourStr += anAdjective;
var someAdjective = "neat";
var myStr = "Learning to code is ";
myStr += someAdjective;
```
</section>

View File

@ -0,0 +1,91 @@
---
id: 56533eb9ac21ba0edf2244c3
title: Assignment with a Returned Value
localeTitle: Asignación con un valor devuelto
challengeType: 1
guideUrl: 'https://spanish.freecodecamp.org/guide/certificates/assignment-with-a-returned-value'
---
## Description
<section id='description'>
Si recordará de nuestra discusión sobre el <a href="javascript-algorithms-and-data-structures/basic-javascript/storing-values-with-the-assignment-operator" target="_blank">almacenamiento de valores con el operador de asignación</a> , todo a la derecha del signo igual se resuelve antes de que se asigne el valor. Esto significa que podemos tomar el valor de retorno de una función y asignarlo a una variable.
Supongamos que hemos predefinido una <code>sum</code> función que suma dos números, luego:
<code>ourSum = sum(5, 12);</code>
llamará a la función <code>sum</code> , que devuelve un valor de <code>17</code> y lo asigna a <code>ourSum</code> variable <code>ourSum</code> .
</section>
## Instructions
<section id='instructions'>
Llame a la función <code>processArg</code> con un argumento de <code>7</code> y asigne su valor de retorno a la variable <code>processed</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>processed</code> debe tener un valor de <code>2</code>
testString: 'assert(processed === 2, "<code>processed</code> should have a value of <code>2</code>");'
- text: Debes asignar <code>processArg</code> a <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>");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
// Example
var changed = 0;
function change(num) {
return (num + 5) / 3;
}
changed = change(10);
// Setup
var processed = 0;
function processArg(num) {
return (num + 3) / 5;
}
// Only change code below this line
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
var processed = 0;
function processArg(num) {
return (num + 3) / 5;
}
processed = processArg(7);
```
</section>

View File

@ -0,0 +1,97 @@
---
id: 56bbb991ad1ed5201cd392d0
title: Build JavaScript Objects
localeTitle: Construir objetos de JavaScript
challengeType: 1
---
## Description
<section id='description'>
Es posible que hayas escuchado el término <code>object</code> antes.
objetos son similares a las <code>arrays</code> , excepto que en lugar de utilizar índices para acceder y modificar sus datos, puede acceder a los datos en objetos a través de lo que se denomina <code>properties</code> .
objetos son útiles para almacenar datos de manera estructurada y pueden representar objetos del mundo real, como un gato.
Aquí hay una muestra de un objeto de gato:
<blockquote>var cat = {<br>&nbsp;&nbsp;"name": "Whiskers",<br>&nbsp;&nbsp;"legs": 4,<br>&nbsp;&nbsp;"tails": 1,<br>&nbsp;&nbsp;"enemies": ["Water", "Dogs"]<br>};</blockquote>
En este ejemplo, todas las propiedades se almacenan como cadenas, como <code>&quot;name&quot;</code> , <code>&quot;legs&quot;</code> y <code>&quot;tails&quot;</code> . Sin embargo, también puede utilizar los números como propiedades. Incluso puede omitir las comillas para las propiedades de cadena de una sola palabra, de la siguiente manera:
<blockquote>var anotherObject = {<br>&nbsp;&nbsp;make: "Ford",<br>&nbsp;&nbsp;5: "five",<br>&nbsp;&nbsp;"model": "focus"<br>};</blockquote>
Sin embargo, si su objeto tiene propiedades que no son de cadena, JavaScript las encasillará automáticamente como cadenas.
</section>
## Instructions
<section id='instructions'>
Haz un objeto que represente un perro llamado <code>myDog</code> que contenga las propiedades <code>&quot;name&quot;</code> (una cadena), <code>&quot;legs&quot;</code> , <code>&quot;tails&quot;</code> y <code>&quot;friends&quot;</code> .
Puede establecer estas propiedades de objeto en los valores que desee, siempre que <code>&quot;name&quot;</code> sea una cadena, <code>&quot;legs&quot;</code> y <code>&quot;tails&quot;</code> sean números, y <code>&quot;friends&quot;</code> es una matriz.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>myDog</code> debe contener el <code>name</code> la propiedad y debe ser una <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> debe contener las <code>legs</code> propiedad y debe ser un <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> debe contener las <code>tails</code> propiedad y debe ser un <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> debe contener los <code>friends</code> la propiedad y debe ser una <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> solo debe contener todas las propiedades dadas.
testString: 'assert((function(z){return Object.keys(z).length === 4;})(myDog), "<code>myDog</code> should only contain all the given properties.");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
// Example
var ourDog = {
"name": "Camper",
"legs": 4,
"tails": 1,
"friends": ["everything!"]
};
// Only change code below this line.
var myDog = {
};
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
var myDog = {
"name": "Camper",
"legs": 4,
"tails": 1,
"friends": ["everything!"]
};
```
</section>

View File

@ -0,0 +1,100 @@
---
id: 56533eb9ac21ba0edf2244dc
title: Chaining If Else Statements
localeTitle: Encadenamiento en caso contrario
challengeType: 1
---
## Description
<section id='description'>
<code>if/else</code> sentencias pueden ser encadenadas juntas para lógica compleja. Aquí está el <dfn>pseudocódigo</dfn> de múltiples encadenadas <code>if</code> / <code>else if</code> enunciados:
<blockquote>if ( <em>condition1</em> ) {<br>&nbsp;&nbsp; <em>statement1</em> <br>} else if ( <em>condition2</em> ) {<br>&nbsp;&nbsp; <em>statement2</em> <br>} else if ( <em>condition3</em> ) {<br>&nbsp;&nbsp; <em>statement3</em> <br>. . .<br>} else {<br>&nbsp;&nbsp; <em>statementN</em> <br>}</blockquote>
</section>
## Instructions
<section id='instructions'>
Escribir en cadena <code>if</code> / <code>else if</code> sentencias para cumplir con las siguientes condiciones:
<code>num &lt; 5</code> - devolver &quot;Tiny&quot; <br> <code>num &lt; 10</code> - devuelve &quot;Small&quot; <br> <code>num &lt; 15</code> - devuelve &quot;Medio&quot; <br> <code>num &lt; 20</code> - devuelve &quot;Large&quot; <br> <code>num &gt;= 20</code> - devuelve &quot;Enorme&quot;
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: Debes tener al menos cuatro declaraciones <code>else</code>
testString: 'assert(code.match(/else/g).length > 3, "You should have at least four <code>else</code> statements");'
- text: Debes tener al menos cuatro <code>if</code> declaraciones
testString: 'assert(code.match(/if/g).length > 3, "You should have at least four <code>if</code> statements");'
- text: Debe tener al menos una declaración de <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> debería devolver &quot;Tiny&quot;
testString: 'assert(testSize(0) === "Tiny", "<code>testSize(0)</code> should return "Tiny"");'
- text: <code>testSize(4)</code> debería devolver &quot;Tiny&quot;
testString: 'assert(testSize(4) === "Tiny", "<code>testSize(4)</code> should return "Tiny"");'
- text: <code>testSize(5)</code> debe devolver &quot;Small&quot;
testString: 'assert(testSize(5) === "Small", "<code>testSize(5)</code> should return "Small"");'
- text: <code>testSize(8)</code> debe devolver &quot;Small&quot;
testString: 'assert(testSize(8) === "Small", "<code>testSize(8)</code> should return "Small"");'
- text: <code>testSize(10)</code> debe devolver &quot;Medium&quot;
testString: 'assert(testSize(10) === "Medium", "<code>testSize(10)</code> should return "Medium"");'
- text: <code>testSize(14)</code> debe devolver &quot;Medium&quot;
testString: 'assert(testSize(14) === "Medium", "<code>testSize(14)</code> should return "Medium"");'
- text: <code>testSize(15)</code> debe devolver &quot;Large&quot;
testString: 'assert(testSize(15) === "Large", "<code>testSize(15)</code> should return "Large"");'
- text: <code>testSize(17)</code> debería devolver &quot;Large&quot;
testString: 'assert(testSize(17) === "Large", "<code>testSize(17)</code> should return "Large"");'
- text: <code>testSize(20)</code> debería devolver &quot;Huge&quot;
testString: 'assert(testSize(20) === "Huge", "<code>testSize(20)</code> should return "Huge"");'
- text: <code>testSize(25)</code> debería devolver &quot;Huge&quot;
testString: 'assert(testSize(25) === "Huge", "<code>testSize(25)</code> should return "Huge"");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
function testSize(num) {
// Only change code below this line
return "Change Me";
// Only change code above this line
}
// Change this value to test
testSize(7);
```
</div>
</section>
## Solution
<section id='solution'>
```js
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

@ -0,0 +1,62 @@
---
id: bd7123c9c441eddfaeb4bdef
title: Comment Your JavaScript Code
localeTitle: Comenta tu código JavaScript
challengeType: 1
---
## Description
<section id='description'>
comentarios son líneas de código que JavaScript ignorará intencionalmente. Los comentarios son una excelente manera de dejar notas para usted y para otras personas que más tarde necesitarán averiguar qué hace ese código.
Hay dos formas de escribir comentarios en JavaScript:
Al usar <code>//</code> le indicará a JavaScript que ignore el resto del texto en la línea actual:
<blockquote>// This is an in-line comment.</blockquote>
Puede hacer un comentario de varias líneas comenzando con <code>/*</code> y terminando con <code>*/</code> :
<blockquote>/* This is a<br>multi-line comment */</blockquote>
<strong>Mejores Prácticas</strong> <br> A medida que escribe el código, debe agregar comentarios regularmente para aclarar la función de partes de su código. Los buenos comentarios pueden ayudar a comunicar la intención de su código, tanto para los demás <em>como</em> para su futuro.
</section>
## Instructions
<section id='instructions'>
Intenta crear uno de cada tipo de comentario.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: Cree un <code>//</code> estilo de comentario que contenga al menos cinco letras.
testString: 'assert(code.match(/(\/\/)...../g), "Create a <code>//</code> style comment that contains at least five letters.");'
- text: Cree un comentario de estilo <code>/* */</code> que contenga al menos cinco letras.
testString: 'assert(code.match(/(\/\*)([^\/]{5,})(?=\*\/)/gm), "Create a <code>/* */</code> style comment that contains at least five letters.");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
```
</div>
</section>
## Solution
<section id='solution'>
```js
// Fake Comment
/* Another Comment */
```
</section>

View File

@ -0,0 +1,78 @@
---
id: 56533eb9ac21ba0edf2244d0
title: Comparison with the Equality Operator
localeTitle: Comparación con el operador de igualdad
challengeType: 1
---
## Description
<section id='description'>
Hay muchos <dfn>operadores de comparación</dfn> en JavaScript. Todos estos operadores devuelven un valor <code>true</code> o <code>false</code> booleano.
El operador más básico es el operador de igualdad <code>==</code> . El operador de igualdad compara dos valores y devuelve <code>true</code> si son equivalentes o <code>false</code> si no lo son. Tenga en cuenta que la igualdad es diferente de la asignación ( <code>=</code> ), que asigna el valor a la derecha del operador a una variable en la izquierda.
<blockquote>function equalityTest(myVal) {<br>&nbsp;&nbsp;if (myVal == 10) {<br>&nbsp;&nbsp;&nbsp;&nbsp; return "Equal";<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;return "Not Equal";<br>}</blockquote>
Si <code>myVal</code> es igual a <code>10</code> , el operador de igualdad devuelve <code>true</code> , por lo que se ejecutará el código entre llaves y la función devolverá <code>&quot;Equal&quot;</code> . De lo contrario, la función devolverá <code>&quot;Not Equal&quot;</code> .
Para que JavaScript pueda comparar dos <code>data types</code> (por ejemplo, <code>numbers</code> y <code>strings</code> ), debe convertir un tipo a otro. Esto se conoce como &quot;Tipo de coerción&quot;. Una vez que lo hace, sin embargo, puede comparar los términos de la siguiente manera:
<blockquote>1 == 1 // true<br>1 == 2 // false<br>1 == '1' // true<br>"3" == 3 // true</blockquote>
</section>
## Instructions
<section id='instructions'>
Agregue el <code>equality operator</code> a la línea indicada para que la función devuelva &quot;Igual&quot; cuando <code>val</code> sea equivalente a <code>12</code>
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>testEqual(10)</code> debe devolver &quot;No es igual&quot;
testString: 'assert(testEqual(10) === "Not Equal", "<code>testEqual(10)</code> should return "Not Equal"");'
- text: <code>testEqual(12)</code> debe devolver &quot;Igual&quot;
testString: 'assert(testEqual(12) === "Equal", "<code>testEqual(12)</code> should return "Equal"");'
- text: <code>testEqual(&quot;12&quot;)</code> debe devolver &quot;Equal&quot;
testString: 'assert(testEqual("12") === "Equal", "<code>testEqual("12")</code> should return "Equal"");'
- text: Debes usar el operador <code>==</code>
testString: 'assert(code.match(/==/g) && !code.match(/===/g), "You should use the <code>==</code> operator");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
// Setup
function testEqual(val) {
if (val) { // Change this line
return "Equal";
}
return "Not Equal";
}
// Change this value to test
testEqual(10);
```
</div>
</section>
## Solution
<section id='solution'>
```js
function testEqual(val) {
if (val == 12) {
return "Equal";
}
return "Not Equal";
}
```
</section>

View File

@ -0,0 +1,91 @@
---
id: 56533eb9ac21ba0edf2244d4
title: Comparison with the Greater Than Operator
localeTitle: Comparación con el operador mayor que
challengeType: 1
---
## Description
<section id='description'>
El operador mayor que ( <code>&gt;</code> ) compara los valores de dos números. Si el número a la izquierda es mayor que el número a la derecha, devuelve <code>true</code> . De lo contrario, devuelve <code>false</code> .
Al igual que el operador de igualdad, el operador mayor que el convertirá los tipos de datos de valores al comparar.
<strong>ejemplos</strong>
<blockquote> 5 > 3 // true<br> 7 > '3' // true<br> 2 > 3 // false<br>'1' > 9 // false</blockquote>
</section>
## Instructions
<section id='instructions'>
Agregue el operador <code>greater than</code> a las líneas indicadas para que las declaraciones de devolución tengan sentido.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>testGreaterThan(0)</code> debe devolver &quot;10 o inferior&quot;
testString: 'assert(testGreaterThan(0) === "10 or Under", "<code>testGreaterThan(0)</code> should return "10 or Under"");'
- text: <code>testGreaterThan(10)</code> debe devolver &quot;10 o inferior&quot;
testString: 'assert(testGreaterThan(10) === "10 or Under", "<code>testGreaterThan(10)</code> should return "10 or Under"");'
- text: <code>testGreaterThan(11)</code> debe devolver &quot;Over 10&quot;
testString: 'assert(testGreaterThan(11) === "Over 10", "<code>testGreaterThan(11)</code> should return "Over 10"");'
- text: <code>testGreaterThan(99)</code> debe devolver &quot;Over 10&quot;
testString: 'assert(testGreaterThan(99) === "Over 10", "<code>testGreaterThan(99)</code> should return "Over 10"");'
- text: <code>testGreaterThan(100)</code> debe devolver &quot;Over 10&quot;
testString: 'assert(testGreaterThan(100) === "Over 10", "<code>testGreaterThan(100)</code> should return "Over 10"");'
- text: <code>testGreaterThan(101)</code> debe devolver &quot;Over 100&quot;
testString: 'assert(testGreaterThan(101) === "Over 100", "<code>testGreaterThan(101)</code> should return "Over 100"");'
- text: <code>testGreaterThan(150)</code> debe devolver &quot;Over 100&quot;
testString: 'assert(testGreaterThan(150) === "Over 100", "<code>testGreaterThan(150)</code> should return "Over 100"");'
- text: Debes usar el operador <code>&gt;</code> al menos dos veces
testString: 'assert(code.match(/val\s*>\s*("|")*\d+("|")*/g).length > 1, "You should use the <code>&gt;</code> operator at least twice");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
function testGreaterThan(val) {
if (val) { // Change this line
return "Over 100";
}
if (val) { // Change this line
return "Over 10";
}
return "10 or Under";
}
// Change this value to test
testGreaterThan(10);
```
</div>
</section>
## Solution
<section id='solution'>
```js
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

@ -0,0 +1,93 @@
---
id: 56533eb9ac21ba0edf2244d5
title: Comparison with the Greater Than Or Equal To Operator
localeTitle: Comparación con el operador mayor o igual que el operador
challengeType: 1
---
## Description
<section id='description'>
El operador <code>greater than or equal to</code> ( <code>&gt;=</code> ) compara los valores de dos números. Si el número a la izquierda es mayor o igual que el número a la derecha, devuelve <code>true</code> . De lo contrario, devuelve <code>false</code> .
Al igual que el operador de igualdad, <code>greater than or equal to</code> operador convertirá los tipos de datos al comparar.
<strong>ejemplos</strong>
<blockquote> 6 >= 6 // true<br> 7 >= '3' // true<br> 2 >= 3 // false<br>'7' >= 9 // false</blockquote>
</section>
## Instructions
<section id='instructions'>
Agregue el operador <code>greater than or equal to</code> las líneas indicadas para que las declaraciones de devolución tengan sentido.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>testGreaterOrEqual(0)</code> debe devolver &quot;Menos de 10&quot;
testString: 'assert(testGreaterOrEqual(0) === "Less than 10", "<code>testGreaterOrEqual(0)</code> should return "Less than 10"");'
- text: <code>testGreaterOrEqual(9)</code> debe devolver &quot;Menos de 10&quot;
testString: 'assert(testGreaterOrEqual(9) === "Less than 10", "<code>testGreaterOrEqual(9)</code> should return "Less than 10"");'
- text: <code>testGreaterOrEqual(10)</code> debe devolver &quot;10 o más&quot;
testString: 'assert(testGreaterOrEqual(10) === "10 or Over", "<code>testGreaterOrEqual(10)</code> should return "10 or Over"");'
- text: <code>testGreaterOrEqual(11)</code> debe devolver &quot;10 o más&quot;
testString: 'assert(testGreaterOrEqual(11) === "10 or Over", "<code>testGreaterOrEqual(11)</code> should return "10 or Over"");'
- text: <code>testGreaterOrEqual(19)</code> debe devolver &quot;10 o más&quot;
testString: 'assert(testGreaterOrEqual(19) === "10 or Over", "<code>testGreaterOrEqual(19)</code> should return "10 or Over"");'
- text: <code>testGreaterOrEqual(100)</code> debe devolver &quot;20 o más&quot;
testString: 'assert(testGreaterOrEqual(100) === "20 or Over", "<code>testGreaterOrEqual(100)</code> should return "20 or Over"");'
- text: <code>testGreaterOrEqual(21)</code> debe devolver &quot;20 o más&quot;
testString: 'assert(testGreaterOrEqual(21) === "20 or Over", "<code>testGreaterOrEqual(21)</code> should return "20 or Over"");'
- text: Debe usar el operador <code>&gt;=</code> al menos dos veces
testString: 'assert(code.match(/val\s*>=\s*("|")*\d+("|")*/g).length > 1, "You should use the <code>&gt;=</code> operator at least twice");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
function testGreaterOrEqual(val) {
if (val) { // Change this line
return "20 or Over";
}
if (val) { // Change this line
return "10 or Over";
}
return "Less than 10";
}
// Change this value to test
testGreaterOrEqual(10);
```
</div>
</section>
## Solution
<section id='solution'>
```js
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

@ -0,0 +1,79 @@
---
id: 56533eb9ac21ba0edf2244d2
title: Comparison with the Inequality Operator
localeTitle: Comparación con el operador de desigualdad
challengeType: 1
---
## Description
<section id='description'>
El operador de desigualdad ( <code>!=</code> ) Es el opuesto del operador de igualdad. Significa &quot;No es igual&quot; y devuelve <code>false</code> donde la igualdad se volvería <code>true</code> y <em>viceversa</em> . Al igual que el operador de igualdad, el operador de desigualdad convertirá los tipos de datos de los valores al comparar.
<strong>ejemplos</strong>
<blockquote>1 != 2 // true<br>1 != "1" // false<br>1 != '1' // false<br>1 != true // false<br>0 != false // false</blockquote>
</section>
## Instructions
<section id='instructions'>
Agregue el operador de desigualdad <code>!=</code> En la instrucción <code>if</code> para que la función devuelva &quot;No igual&quot; cuando <code>val</code> no es equivalente a <code>99</code>
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>testNotEqual(99)</code> debe devolver &quot;Igual&quot;
testString: 'assert(testNotEqual(99) === "Equal", "<code>testNotEqual(99)</code> should return "Equal"");'
- text: <code>testNotEqual(&quot;99&quot;)</code> debe devolver &quot;Equal&quot;
testString: 'assert(testNotEqual("99") === "Equal", "<code>testNotEqual("99")</code> should return "Equal"");'
- text: <code>testNotEqual(12)</code> debe devolver &quot;No es igual&quot;
testString: 'assert(testNotEqual(12) === "Not Equal", "<code>testNotEqual(12)</code> should return "Not Equal"");'
- text: <code>testNotEqual(&quot;12&quot;)</code> debe devolver &quot;Not Equal&quot;
testString: 'assert(testNotEqual("12") === "Not Equal", "<code>testNotEqual("12")</code> should return "Not Equal"");'
- text: <code>testNotEqual(&quot;bob&quot;)</code> debe devolver &quot;Not Equal&quot;
testString: 'assert(testNotEqual("bob") === "Not Equal", "<code>testNotEqual("bob")</code> should return "Not Equal"");'
- text: Debes usar el operador <code>!=</code>
testString: 'assert(code.match(/(?!!==)!=/), "You should use the <code>!=</code> operator");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
// Setup
function testNotEqual(val) {
if (val) { // Change this line
return "Not Equal";
}
return "Equal";
}
// Change this value to test
testNotEqual(10);
```
</div>
</section>
## Solution
<section id='solution'>
```js
function testNotEqual(val) {
if (val != 99) {
return "Not Equal";
}
return "Equal";
}
```
</section>

View File

@ -0,0 +1,90 @@
---
id: 56533eb9ac21ba0edf2244d6
title: Comparison with the Less Than Operator
localeTitle: Comparación con el operador menor que
challengeType: 1
---
## Description
<section id='description'>
El operador <dfn>menor que</dfn> ( <code>&lt;</code> ) compara los valores de dos números. Si el número a la izquierda es menor que el número a la derecha, devuelve <code>true</code> . De lo contrario, devuelve <code>false</code> . Al igual que el operador de igualdad, <dfn>menos que el</dfn> operador convierte los tipos de datos al comparar.
<strong>ejemplos</strong>
<blockquote>2 &lt; 5 // true<br>'3' &lt; 7 // true<br>5 &lt; 5 // false<br>3 &lt; 2 // false<br>'8' &lt; 4 // false</blockquote>
</section>
## Instructions
<section id='instructions'>
Agregue el operador <code>less than</code> a las líneas indicadas para que las declaraciones de devolución tengan sentido.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>testLessThan(0)</code> debe devolver &quot;Under 25&quot;
testString: 'assert(testLessThan(0) === "Under 25", "<code>testLessThan(0)</code> should return "Under 25"");'
- text: <code>testLessThan(24)</code> debe devolver &quot;Under 25&quot;
testString: 'assert(testLessThan(24) === "Under 25", "<code>testLessThan(24)</code> should return "Under 25"");'
- text: <code>testLessThan(25)</code> debe devolver &quot;Under 55&quot;
testString: 'assert(testLessThan(25) === "Under 55", "<code>testLessThan(25)</code> should return "Under 55"");'
- text: <code>testLessThan(54)</code> debe devolver &quot;Under 55&quot;
testString: 'assert(testLessThan(54) === "Under 55", "<code>testLessThan(54)</code> should return "Under 55"");'
- text: <code>testLessThan(55)</code> debería devolver &quot;55 o más&quot;
testString: 'assert(testLessThan(55) === "55 or Over", "<code>testLessThan(55)</code> should return "55 or Over"");'
- text: <code>testLessThan(99)</code> debería devolver &quot;55 o más&quot;
testString: 'assert(testLessThan(99) === "55 or Over", "<code>testLessThan(99)</code> should return "55 or Over"");'
- text: Debes usar el operador <code>&lt;</code> al menos dos veces
testString: 'assert(code.match(/val\s*<\s*("|")*\d+("|")*/g).length > 1, "You should use the <code>&lt;</code> operator at least twice");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
function testLessThan(val) {
if (val) { // Change this line
return "Under 25";
}
if (val) { // Change this line
return "Under 55";
}
return "55 or Over";
}
// Change this value to test
testLessThan(10);
```
</div>
</section>
## Solution
<section id='solution'>
```js
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

@ -0,0 +1,93 @@
---
id: 56533eb9ac21ba0edf2244d7
title: Comparison with the Less Than Or Equal To Operator
localeTitle: Comparación con el operador menor o igual que
challengeType: 1
---
## Description
<section id='description'>
El operador <code>less than or equal to</code> ( <code>&lt;=</code> ) compara los valores de dos números. Si el número a la izquierda es menor o igual que el número a la derecha, devuelve <code>true</code> . Si el número de la izquierda es mayor que el de la derecha, devuelve <code>false</code> . Al igual que el operador de igualdad, <code>less than or equal to</code> convierte los tipos de datos.
<strong>ejemplos</strong>
<blockquote>4 &lt;= 5 // true<br>'7' &lt;= 7 // true<br>5 &lt;= 5 // true<br>3 &lt;= 2 // false<br>'8' &lt;= 4 // false</blockquote>
</section>
## Instructions
<section id='instructions'>
Agregue el operador <code>less than or equal to</code> las líneas indicadas para que las declaraciones de devolución tengan sentido.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>testLessOrEqual(0)</code> debe devolver &quot;Más pequeño o igual a 12&quot;
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> debe devolver &quot;Más pequeño o igual a 12&quot;
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> debe devolver &quot;Más pequeño o igual a 12&quot;
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> debe devolver &quot;Más pequeño o igual a 24&quot;
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> debe devolver &quot;Más pequeño o igual a 24&quot;
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> debe devolver &quot;Más de 24&quot;
testString: 'assert(testLessOrEqual(25) === "More Than 24", "<code>testLessOrEqual(25)</code> should return "More Than 24"");'
- text: <code>testLessOrEqual(55)</code> debe devolver &quot;Más de 24&quot;
testString: 'assert(testLessOrEqual(55) === "More Than 24", "<code>testLessOrEqual(55)</code> should return "More Than 24"");'
- text: Debe usar el operador <code>&lt;=</code> al menos dos veces
testString: 'assert(code.match(/val\s*<=\s*("|")*\d+("|")*/g).length > 1, "You should use the <code>&lt;=</code> operator at least twice");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
function testLessOrEqual(val) {
if (val) { // Change this line
return "Smaller Than or Equal to 12";
}
if (val) { // Change this line
return "Smaller Than or Equal to 24";
}
return "More Than 24";
}
// Change this value to test
testLessOrEqual(10);
```
</div>
</section>
## Solution
<section id='solution'>
```js
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

@ -0,0 +1,77 @@
---
id: 56533eb9ac21ba0edf2244d1
title: Comparison with the Strict Equality Operator
localeTitle: Comparación con el operador de igualdad estricta
challengeType: 1
---
## Description
<section id='description'>
Igualdad estricta ( <code>===</code> ) es la contraparte del operador de igualdad ( <code>==</code> ). Sin embargo, a diferencia del operador de igualdad, que intenta convertir ambos valores en comparación con un tipo común, el operador de igualdad estricta no realiza una conversión de tipo.
Si los valores que se comparan tienen tipos diferentes, se consideran desiguales y el operador de igualdad estricta devolverá el valor falso.
<strong>ejemplos</strong>
<blockquote>3 === 3 // true<br>3 === '3' // false</blockquote>
En el segundo ejemplo, <code>3</code> es un tipo de <code>Number</code> y <code>&#39;3&#39;</code> es un tipo de <code>String</code> .
</section>
## Instructions
<section id='instructions'>
Use el operador de igualdad estricta en la instrucción <code>if</code> para que la función devuelva &quot;Igual&quot; cuando <code>val</code> sea estrictamente igual a <code>7</code>
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>testStrict(10)</code> debe devolver &quot;No es igual&quot;
testString: 'assert(testStrict(10) === "Not Equal", "<code>testStrict(10)</code> should return "Not Equal"");'
- text: <code>testStrict(7)</code> debe devolver &quot;Igual&quot;
testString: 'assert(testStrict(7) === "Equal", "<code>testStrict(7)</code> should return "Equal"");'
- text: <code>testStrict(&quot;7&quot;)</code> debe devolver &quot;Not Equal&quot;
testString: 'assert(testStrict("7") === "Not Equal", "<code>testStrict("7")</code> should return "Not Equal"");'
- text: Debes usar el operador <code>===</code>
testString: 'assert(code.match(/(val\s*===\s*\d+)|(\d+\s*===\s*val)/g).length > 0, "You should use the <code>===</code> operator");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
// Setup
function testStrict(val) {
if (val) { // Change this line
return "Equal";
}
return "Not Equal";
}
// Change this value to test
testStrict(10);
```
</div>
</section>
## Solution
<section id='solution'>
```js
function testStrict(val) {
if (val === 7) {
return "Equal";
}
return "Not Equal";
}
```
</section>

View File

@ -0,0 +1,82 @@
---
id: 56533eb9ac21ba0edf2244d3
title: Comparison with the Strict Inequality Operator
localeTitle: Comparación con el operador de desigualdad estricta
challengeType: 1
---
## Description
<section id='description'>
El operador de desigualdad estricta ( <code>!==</code> ) es el opuesto lógico del operador de igualdad estricta. Significa &quot;Estrictamente no es igual&quot; y devuelve <code>false</code> donde la igualdad estricta sería <code>true</code> y <em>viceversa</em> . La desigualdad estricta no convertirá los tipos de datos.
<strong>ejemplos</strong>
<blockquote>3 !== 3 // false<br>3 !== '3' // true<br>4 !== 3 // true</blockquote>
</section>
## Instructions
<section id='instructions'>
Agregue el <code>strict inequality operator</code> a la sentencia <code>if</code> para que la función devuelva &quot;No igual&quot; cuando <code>val</code> no sea estrictamente igual a <code>17</code>
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>testStrictNotEqual(17)</code> debe devolver &quot;Equal&quot;
testString: 'assert(testStrictNotEqual(17) === "Equal", "<code>testStrictNotEqual(17)</code> should return "Equal"");'
- text: <code>testStrictNotEqual(&quot;17&quot;)</code> debe devolver &quot;Not Equal&quot;
testString: 'assert(testStrictNotEqual("17") === "Not Equal", "<code>testStrictNotEqual("17")</code> should return "Not Equal"");'
- text: <code>testStrictNotEqual(12)</code> debe devolver &quot;Not Equal&quot;
testString: 'assert(testStrictNotEqual(12) === "Not Equal", "<code>testStrictNotEqual(12)</code> should return "Not Equal"");'
- text: <code>testStrictNotEqual(&quot;bob&quot;)</code> debe devolver &quot;Not Equal&quot;
testString: 'assert(testStrictNotEqual("bob") === "Not Equal", "<code>testStrictNotEqual("bob")</code> should return "Not Equal"");'
- text: Debes usar el operador <code>!==</code>
testString: 'assert(code.match(/(val\s*!==\s*\d+)|(\d+\s*!==\s*val)/g).length > 0, "You should use the <code>!==</code> operator");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
// Setup
function testStrictNotEqual(val) {
// Only Change Code Below this Line
if (val) {
// Only Change Code Above this Line
return "Not Equal";
}
return "Equal";
}
// Change this value to test
testStrictNotEqual(10);
```
</div>
</section>
## Solution
<section id='solution'>
```js
function testStrictNotEqual(val) {
if (val !== 17) {
return "Not Equal";
}
return "Equal";
}
```
</section>

View File

@ -0,0 +1,94 @@
---
id: 56533eb9ac21ba0edf2244d8
title: Comparisons with the Logical And Operator
localeTitle: Comparaciones con lo lógico y el operador.
challengeType: 1
---
## Description
<section id='description'>
A veces necesitará probar más de una cosa a la vez. La <dfn>lógica y el</dfn> operador ( <code>&amp;&amp;</code> ) devuelven <code>true</code> si y solo si los <dfn>operandos</dfn> a su izquierda y derecha son verdaderos.
El mismo efecto podría lograrse anidando una instrucción if dentro de otra if:
<blockquote>if (num > 5) {<br>&nbsp;&nbsp;if (num < 10) {<br>&nbsp;&nbsp;&nbsp;&nbsp;return "Yes";<br>&nbsp;&nbsp;}<br>}<br>return "No";</blockquote>
solo devolverá &quot;&quot; si <code>num</code> es mayor que <code>5</code> y menor que <code>10</code> . La misma lógica se puede escribir como:
<blockquote>if (num > 5 && num < 10) {<br>&nbsp;&nbsp;return "Yes";<br>}<br>return "No";</blockquote>
</section>
## Instructions
<section id='instructions'>
Combine las dos declaraciones if en una declaración que devolverá <code>&quot;Yes&quot;</code> si <code>val</code> es menor o igual a <code>50</code> y mayor o igual a <code>25</code> . De lo contrario, devolverá <code>&quot;No&quot;</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: Debe usar el operador <code>&amp;&amp;</code> una vez
testString: 'assert(code.match(/&&/g).length === 1, "You should use the <code>&&</code> operator once");'
- text: Sólo debe tener una declaración <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> debe devolver &quot;No&quot;
testString: 'assert(testLogicalAnd(0) === "No", "<code>testLogicalAnd(0)</code> should return "No"");'
- text: <code>testLogicalAnd(24)</code> debe devolver &quot;No&quot;
testString: 'assert(testLogicalAnd(24) === "No", "<code>testLogicalAnd(24)</code> should return "No"");'
- text: <code>testLogicalAnd(25)</code> debe devolver &quot;Sí&quot;
testString: 'assert(testLogicalAnd(25) === "Yes", "<code>testLogicalAnd(25)</code> should return "Yes"");'
- text: <code>testLogicalAnd(30)</code> debe devolver &quot;Sí&quot;
testString: 'assert(testLogicalAnd(30) === "Yes", "<code>testLogicalAnd(30)</code> should return "Yes"");'
- text: <code>testLogicalAnd(50)</code> debe devolver &quot;Sí&quot;
testString: 'assert(testLogicalAnd(50) === "Yes", "<code>testLogicalAnd(50)</code> should return "Yes"");'
- text: <code>testLogicalAnd(51)</code> debe devolver &quot;No&quot;
testString: 'assert(testLogicalAnd(51) === "No", "<code>testLogicalAnd(51)</code> should return "No"");'
- text: <code>testLogicalAnd(75)</code> debe devolver &quot;No&quot;
testString: 'assert(testLogicalAnd(75) === "No", "<code>testLogicalAnd(75)</code> should return "No"");'
- text: <code>testLogicalAnd(80)</code> debe devolver &quot;No&quot;
testString: 'assert(testLogicalAnd(80) === "No", "<code>testLogicalAnd(80)</code> should return "No"");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
function testLogicalAnd(val) {
// Only change code below this line
if (val) {
if (val) {
return "Yes";
}
}
// Only change code above this line
return "No";
}
// Change this value to test
testLogicalAnd(10);
```
</div>
</section>
## Solution
<section id='solution'>
```js
function testLogicalAnd(val) {
if (val >= 25 && val <= 50) {
return "Yes";
}
return "No";
}
```
</section>

View File

@ -0,0 +1,97 @@
---
id: 56533eb9ac21ba0edf2244d9
title: Comparisons with the Logical Or Operator
localeTitle: Comparaciones con el operador lógico o
challengeType: 1
---
## Description
<section id='description'>
El <dfn>lógico u</dfn> operador ( <code>||</code> ) devuelve <code>true</code> si cualquiera de los <dfn>operandos</dfn> es <code>true</code> . De lo contrario, devuelve <code>false</code> .
El operador <dfn>lógico</dfn> está compuesto de dos símbolos de tubería ( <code>|</code> ). Normalmente, esto se puede encontrar entre las teclas Retroceso e Intro.
El patrón a continuación debe parecer familiar de los puntos de paso anteriores:
<blockquote>if (num > 10) {<br>&nbsp;&nbsp;return "No";<br>}<br>if (num < 5) {<br>&nbsp;&nbsp;return "No";<br>}<br>return "Yes";</blockquote>
devolverá &quot;&quot; solo si el <code>num</code> está entre <code>5</code> y <code>10</code> (5 y 10 incluidos). La misma lógica se puede escribir como:
<blockquote>if (num > 10 || num < 5) {<br>&nbsp;&nbsp;return "No";<br>}<br>return "Yes";</blockquote>
</section>
## Instructions
<section id='instructions'>
Combine las dos declaraciones <code>if</code> en una declaración que devuelva <code>&quot;Outside&quot;</code> si <code>val</code> no está entre <code>10</code> y <code>20</code> , inclusive. De lo contrario, devuelve <code>&quot;Inside&quot;</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: Deberías usar el <code>||</code> operador una vez
testString: 'assert(code.match(/\|\|/g).length === 1, "You should use the <code>||</code> operator once");'
- text: Sólo debe tener una declaración <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> debe devolver &quot;Outside&quot;
testString: 'assert(testLogicalOr(0) === "Outside", "<code>testLogicalOr(0)</code> should return "Outside"");'
- text: <code>testLogicalOr(9)</code> debe devolver &quot;Outside&quot;
testString: 'assert(testLogicalOr(9) === "Outside", "<code>testLogicalOr(9)</code> should return "Outside"");'
- text: <code>testLogicalOr(10)</code> debe devolver &quot;Inside&quot;
testString: 'assert(testLogicalOr(10) === "Inside", "<code>testLogicalOr(10)</code> should return "Inside"");'
- text: <code>testLogicalOr(15)</code> debe devolver &quot;Inside&quot;
testString: 'assert(testLogicalOr(15) === "Inside", "<code>testLogicalOr(15)</code> should return "Inside"");'
- text: <code>testLogicalOr(19)</code> debe devolver &quot;Inside&quot;
testString: 'assert(testLogicalOr(19) === "Inside", "<code>testLogicalOr(19)</code> should return "Inside"");'
- text: <code>testLogicalOr(20)</code> debe devolver &quot;Inside&quot;
testString: 'assert(testLogicalOr(20) === "Inside", "<code>testLogicalOr(20)</code> should return "Inside"");'
- text: <code>testLogicalOr(21)</code> debe devolver &quot;Outside&quot;
testString: 'assert(testLogicalOr(21) === "Outside", "<code>testLogicalOr(21)</code> should return "Outside"");'
- text: <code>testLogicalOr(25)</code> debe devolver &quot;Outside&quot;
testString: 'assert(testLogicalOr(25) === "Outside", "<code>testLogicalOr(25)</code> should return "Outside"");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
function testLogicalOr(val) {
// Only change code below this line
if (val) {
return "Outside";
}
if (val) {
return "Outside";
}
// Only change code above this line
return "Inside";
}
// Change this value to test
testLogicalOr(15);
```
</div>
</section>
## Solution
<section id='solution'>
```js
function testLogicalOr(val) {
if (val < 10 || val > 20) {
return "Outside";
}
return "Inside";
}
```
</section>

View File

@ -0,0 +1,88 @@
---
id: 56533eb9ac21ba0edf2244af
title: Compound Assignment With Augmented Addition
localeTitle: Asignación compuesta con adición aumentada
challengeType: 1
---
## Description
<section id='description'>
En la programación, es común usar asignaciones para modificar el contenido de una variable. Recuerde que todo a la derecha del signo igual se evalúa primero, por lo que podemos decir:
<code>myVar = myVar + 5;</code>
para agregar <code>5</code> a <code>myVar</code> . Dado que este es un patrón tan común, hay operadores que realizan tanto una operación matemática como una asignación en un solo paso.
Uno de tales operadores es el operador <code>+=</code> .
<blockquote>var myVar = 1;<br>myVar += 5;<br>console.log(myVar); // Returns 6</blockquote>
</section>
## Instructions
<section id='instructions'>
Convierta las asignaciones para <code>a</code> , <code>b</code> y <code>c</code> para usar el operador <code>+=</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>a</code> debe ser igual a <code>15</code>
testString: 'assert(a === 15, "<code>a</code> should equal <code>15</code>");'
- text: <code>b</code> debe ser igual a <code>26</code>
testString: 'assert(b === 26, "<code>b</code> should equal <code>26</code>");'
- text: <code>c</code> debería ser igual a <code>19</code>
testString: 'assert(c === 19, "<code>c</code> should equal <code>19</code>");'
- text: Debes usar el operador <code>+=</code> para cada variable
testString: 'assert(code.match(/\+=/g).length === 3, "You should use the <code>+=</code> operator for each variable");'
- text: No modifique el código sobre la línea.
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");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
var a = 3;
var b = 17;
var c = 12;
// Only modify code below this line
a = a + 12;
b = 9 + b;
c = c + 7;
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
var a = 3;
var b = 17;
var c = 12;
a += 12;
b += 9;
c += 7;
```
</section>

View File

@ -0,0 +1,87 @@
---
id: 56533eb9ac21ba0edf2244b2
title: Compound Assignment With Augmented Division
localeTitle: Asignación compuesta con división aumentada
challengeType: 1
---
## Description
<section id='description'>
El operador <code>/=</code> divide una variable por otro número.
<code>myVar = myVar / 5;</code>
<code>myVar</code> por <code>5</code> . Esto se puede reescribir como:
<code>myVar /= 5;</code>
</section>
## Instructions
<section id='instructions'>
Convierta las asignaciones para <code>a</code> , <code>b</code> y <code>c</code> para usar el operador <code>/=</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>a</code> debería ser igual a <code>4</code>
testString: 'assert(a === 4, "<code>a</code> should equal <code>4</code>");'
- text: <code>b</code> debería ser igual a <code>27</code>
testString: 'assert(b === 27, "<code>b</code> should equal <code>27</code>");'
- text: <code>c</code> debería ser igual a <code>3</code>
testString: 'assert(c === 3, "<code>c</code> should equal <code>3</code>");'
- text: Debes usar el operador <code>/=</code> para cada variable
testString: 'assert(code.match(/\/=/g).length === 3, "You should use the <code>/=</code> operator for each variable");'
- text: No modifique el código sobre la línea.
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");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
var a = 48;
var b = 108;
var c = 33;
// Only modify code below this line
a = a / 12;
b = b / 4;
c = c / 11;
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
var a = 48;
var b = 108;
var c = 33;
a /= 12;
b /= 4;
c /= 11;
```
</section>

View File

@ -0,0 +1,88 @@
---
id: 56533eb9ac21ba0edf2244b1
title: Compound Assignment With Augmented Multiplication
localeTitle: Asignación compuesta con multiplicación aumentada
challengeType: 1
---
## Description
<section id='description'>
El operador <code>*=</code> multiplica una variable por un número.
<code>myVar = myVar * 5;</code>
multiplicará <code>myVar</code> por <code>5</code> . Esto se puede reescribir como:
<code>myVar *= 5;</code>
</section>
## Instructions
<section id='instructions'>
Convierta las asignaciones para <code>a</code> , <code>b</code> y <code>c</code> para usar el operador <code>*=</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>a</code> debe ser igual a <code>25</code>
testString: 'assert(a === 25, "<code>a</code> should equal <code>25</code>");'
- text: <code>b</code> debe ser igual a <code>36</code>
testString: 'assert(b === 36, "<code>b</code> should equal <code>36</code>");'
- text: <code>c</code> debería ser igual a <code>46</code>
testString: 'assert(c === 46, "<code>c</code> should equal <code>46</code>");'
- text: Debes usar el operador <code>*=</code> para cada variable
testString: 'assert(code.match(/\*=/g).length === 3, "You should use the <code>*=</code> operator for each variable");'
- text: No modifique el código sobre la línea.
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");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
var a = 5;
var b = 12;
var c = 4.6;
// Only modify code below this line
a = a * 5;
b = 3 * b;
c = c * 10;
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
var a = 5;
var b = 12;
var c = 4.6;
a *= 5;
b *= 3;
c *= 10;
```
</section>

View File

@ -0,0 +1,90 @@
---
id: 56533eb9ac21ba0edf2244b0
title: Compound Assignment With Augmented Subtraction
localeTitle: Asignación compuesta con resta aumentada
challengeType: 1
---
## Description
<section id='description'>
Al igual que el operador <code>+=</code> , <code>-=</code> resta un número de una variable.
<code>myVar = myVar - 5;</code>
restará <code>5</code> de <code>myVar</code> . Esto se puede reescribir como:
<code>myVar -= 5;</code>
</section>
## Instructions
<section id='instructions'>
Convierta las asignaciones para <code>a</code> , <code>b</code> y <code>c</code> para usar el operador <code>-=</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>a</code> debe ser igual a <code>5</code>
testString: 'assert(a === 5, "<code>a</code> should equal <code>5</code>");'
- text: <code>b</code> debería ser igual a <code>-6</code>
testString: 'assert(b === -6, "<code>b</code> should equal <code>-6</code>");'
- text: <code>c</code> debería ser igual a <code>2</code>
testString: 'assert(c === 2, "<code>c</code> should equal <code>2</code>");'
- text: Debe usar el operador <code>-=</code> para cada variable
testString: 'assert(code.match(/-=/g).length === 3, "You should use the <code>-=</code> operator for each variable");'
- text: No modifique el código sobre la línea.
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");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
var a = 11;
var b = 9;
var c = 3;
// Only modify code below this line
a = a - 6;
b = b - 15;
c = c - 1;
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
var a = 11;
var b = 9;
var c = 3;
a -= 6;
b -= 15;
c -= 1;
```
</section>

View File

@ -0,0 +1,78 @@
---
id: 56533eb9ac21ba0edf2244b7
title: Concatenating Strings with Plus Operator
localeTitle: Concatenando cuerdas con el operador Plus
challengeType: 1
---
## Description
<section id='description'>
En JavaScript, cuando el operador <code>+</code> se usa con un valor de <code>String</code> , se llama operador de <dfn>concatenación</dfn> . Puede construir una nueva cadena a partir de otras cadenas <dfn>concatenándolas</dfn> juntas.
<strong>Ejemplo</strong>
<blockquote>'My name is Alan,' + ' I concatenate.'</blockquote>
<strong>Nota</strong> <br> Cuidado con los espacios. La concatenación no agrega espacios entre las cadenas concatenadas, por lo que deberá agregarlas usted mismo.
</section>
## Instructions
<section id='instructions'>
Construye <code>myStr</code> partir de las cadenas <code>&quot;This is the start. &quot;</code> y <code>&quot;This is the end.&quot;</code> utilizando el operador <code>+</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>myStr</code> debe tener un valor de <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: Usa el operador <code>+</code> para construir <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> debe crearse usando la palabra clave <code>var</code> .
testString: 'assert(/var\s+myStr/.test(code), "<code>myStr</code> should be created using the <code>var</code> keyword.");'
- text: Asegúrese de asignar el resultado a la variable <code>myStr</code> .
testString: 'assert(/myStr\s*=/.test(code), "Make sure to assign the result to the <code>myStr</code> variable.");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
// Example
var ourStr = "I come first. " + "I come second.";
// Only change code below this line
var myStr;
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
var ourStr = "I come first. " + "I come second.";
var myStr = "This is the start. " + "This is the end.";
```
</section>

View File

@ -0,0 +1,76 @@
---
id: 56533eb9ac21ba0edf2244b8
title: Concatenating Strings with the Plus Equals Operator
localeTitle: Concatenando cadenas con el operador Plus Equals
challengeType: 1
---
## Description
<section id='description'>
También podemos usar el operador <code>+=</code> para <dfn>concatenar</dfn> una cadena al final de una variable de cadena existente. Esto puede ser muy útil para romper una cadena larga en varias líneas.
<strong>Nota</strong> <br> Cuidado con los espacios. La concatenación no agrega espacios entre las cadenas concatenadas, por lo que deberá agregarlas usted mismo.
</section>
## Instructions
<section id='instructions'>
Construya <code>myStr</code> en varias líneas concatenando estas dos cadenas: <code>&quot;This is the first sentence. &quot;</code> y <code>&quot;This is the second sentence.&quot;</code> utilizando el operador <code>+=</code> . Utilice el operador <code>+=</code> similar a como se muestra en el editor. Comience por asignar la primera cadena a <code>myStr</code> , luego agregue la segunda cadena.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>myStr</code> debe tener un valor de <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: Usa el operador <code>+=</code> para construir <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>");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
// Example
var ourStr = "I come first. ";
ourStr += "I come second.";
// Only change code below this line
var myStr;
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
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

@ -0,0 +1,72 @@
---
id: 56533eb9ac21ba0edf2244b9
title: Constructing Strings with Variables
localeTitle: Construyendo cuerdas con variables
challengeType: 1
---
## Description
<section id='description'>
A veces necesitarás construir una cadena, al estilo de <a href="https://en.wikipedia.org/wiki/Mad_Libs" target="_blank">Mad Libs</a> . Al utilizar el operador de concatenación ( <code>+</code> ), puede insertar una o más variables en una cadena que está creando.
</section>
## Instructions
<section id='instructions'>
Establezca <code>myName</code> en una cadena igual a su nombre y compile <code>myStr</code> con <code>myName</code> entre las cadenas <code>&quot;My name is &quot;</code> y <code>&quot; and I am well!&quot;</code>
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>myName</code> debe establecerse en una cadena de al menos 3 caracteres
testString: 'assert(typeof myName !== "undefined" && myName.length > 2, "<code>myName</code> should be set to a string at least 3 characters long");'
- text: Usa dos operadores <code>+</code> para construir <code>myStr</code> con <code>myName</code> dentro de él
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");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
// Example
var ourName = "freeCodeCamp";
var ourStr = "Hello, our name is " + ourName + ", how are you?";
// Only change code below this line
var myName;
var myStr;
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
var myName = "Bob";
var myStr = "My name is " + myName + " and I am well!";
```
</section>

View File

@ -0,0 +1,89 @@
---
id: 56105e7b514f539506016a5e
title: Count Backwards With a For Loop
localeTitle: Contar hacia atrás con un bucle for
challengeType: 1
---
## Description
<section id='description'>
A for loop también puede contar hacia atrás, siempre que podamos definir las condiciones correctas.
Para contar hacia atrás de dos en dos, necesitaremos cambiar nuestra <code>initialization</code> , <code>condition</code> y <code>final-expression</code> .
Comenzaremos en <code>i = 10</code> y haremos un bucle mientras <code>i &gt; 0</code> . Disminuiremos <code>i</code> en 2 cada bucle con <code>i -= 2</code> .
<blockquote>var ourArray = [];<br>for (var i=10; i &#62; 0; i-=2) {<br>&nbsp;&nbsp;ourArray.push(i);<br>}</blockquote>
<code>ourArray</code> ahora contendrá <code>[10,8,6,4,2]</code> .
Cambiemos nuestra <code>initialization</code> y <code>final-expression</code> para que podamos contar hacia atrás de dos en dos con números impares.
</section>
## Instructions
<section id='instructions'>
Empuje los números impares del 9 al 1 a <code>myArray</code> usando un bucle <code>for</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: Usted debe estar usando una <code>for</code> bucle para esto.
testString: 'assert(code.match(/for\s*\(/g).length > 1, "You should be using a <code>for</code> loop for this.");'
- text: Deberías estar usando el método de matriz <code>push</code> .
testString: 'assert(code.match(/myArray.push/), "You should be using the array method <code>push</code>.");'
- text: &#39; <code>myArray</code> debe ser igual a <code>[9,7,5,3,1]</code> .&#39;
testString: 'assert.deepEqual(myArray, [9,7,5,3,1], "<code>myArray</code> should equal <code>[9,7,5,3,1]</code>.");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
// Example
var ourArray = [];
for (var i = 10; i > 0; i -= 2) {
ourArray.push(i);
}
// Setup
var myArray = [];
// Only change code below this line.
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
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

@ -0,0 +1,104 @@
---
id: 565bbe00e9cc8ac0725390f4
title: Counting Cards
localeTitle: Tarjetas de conteo
challengeType: 1
---
## Description
<section id='description'>
En el juego de casino Blackjack, un jugador puede obtener una ventaja sobre la casa al hacer un seguimiento del número relativo de cartas altas y bajas que quedan en el mazo. Esto se llama <a href='https://en.wikipedia.org/wiki/Card_counting' target='_blank'>conteo de cartas</a> .
Tener más cartas altas en el mazo favorece al jugador. A cada tarjeta se le asigna un valor de acuerdo con la siguiente tabla. Cuando el conteo es positivo, el jugador debe apostar alto. Cuando el conteo es cero o negativo, el jugador debe apostar bajo.
<table class="table table-striped"><thead><tr><th> Cambio de cuenta </th><th> Tarjetas </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>
Escribirás una función de conteo de cartas. Recibirá un parámetro de <code>card</code> , que puede ser un número o una cadena, y aumentará o disminuirá la variable de <code>count</code> global según el valor de la tarjeta (consulte la tabla). La función devolverá una cadena con el recuento actual y la cadena <code>Bet</code> si el recuento es positivo, o <code>Hold</code> si el recuento es cero o negativo. El conteo actual y la decisión del jugador ( <code>Bet</code> o <code>Hold</code> ) deben estar separados por un solo espacio.
<strong>Ejemplo de salida</strong> <br> <code>-3 Hold</code> <br> <code>5 Bet</code>
<strong>Sugerencia</strong> <br> NO reinicie el <code>count</code> a 0 cuando el valor sea 7, 8 o 9. <br> NO devuelva una matriz. <br> NO incluya comillas (simples o dobles) en la salida.
</section>
## Instructions
<section id='instructions'>
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: &#39;Las secuencias de cartas 2, 3, 4, 5, 6 deben devolver <code>5 Bet</code> &#39;
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: &#39;Las secuencias de cartas 7, 8, 9 deben devolver <code>0 Hold</code> &#39;
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: &#39;La secuencia de cartas 10, J, Q, K, A debería devolver <code>-5 Hold</code> &#39;
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: &#39;Las secuencias de cartas 3, 7, Q, 8, A deben devolver <code>-1 Hold</code> &#39;
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: &#39;Las secuencias de cartas 2, J, 9, 2, 7 deben devolver <code>1 Bet</code> &#39;
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: &#39;Las secuencias de cartas 2, 2, 10 deben devolver <code>1 Bet</code> &#39;
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: &#39;Secuencia de cartas 3, 2, A, 10, K debería devolver <code>-1 Hold</code> &#39;
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>");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
var count = 0;
function cc(card) {
// Only change code below this line
return "Change Me";
// Only change code above this line
}
// Add/remove calls to test your function.
// Note: Only the last will display
cc(2); cc(3); cc(7); cc('K'); cc('A');
```
</div>
</section>
## Solution
<section id='solution'>
```js
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

@ -0,0 +1,68 @@
---
id: cf1391c1c11feddfaeb4bdef
title: Create Decimal Numbers with JavaScript
localeTitle: Crea números decimales con JavaScript
challengeType: 1
---
## Description
<section id='description'>
Podemos almacenar números decimales en variables también. Los números decimales a veces se denominan números de <dfn>punto flotante</dfn> o <dfn>flotantes</dfn> .
<strong>Nota</strong> <br> No todos los números reales se pueden representar con precisión en <dfn>coma flotante</dfn> . Esto puede llevar a errores de redondeo. <a href="https://en.wikipedia.org/wiki/Floating_point#Accuracy_problems" target="_blank">Detalles aquí</a> .
</section>
## Instructions
<section id='instructions'>
Crea una variable <code>myDecimal</code> y dale un valor decimal con una parte fraccionaria (por ejemplo, <code>5.7</code> ).
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>myDecimal</code> debe ser un número.
testString: 'assert(typeof myDecimal === "number", "<code>myDecimal</code> should be a number.");'
- text: <code>myDecimal</code> debería tener un punto decimal
testString: 'assert(myDecimal % 1 != 0, "<code>myDecimal</code> should have a decimal point"); '
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
var ourDecimal = 5.7;
// Only change code below this line
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
var myDecimal = 9.9;
```
</section>

View File

@ -0,0 +1,73 @@
---
id: bd7123c9c443eddfaeb5bdef
title: Declare JavaScript Variables
localeTitle: Declarar las variables de JavaScript
challengeType: 1
---
## Description
<section id='description'>
En informática, los <dfn>datos</dfn> son cualquier cosa que sea significativa para la computadora. JavaScript proporciona siete <dfn>tipos de datos diferentes</dfn> que son <code>undefined</code> , <code>null</code> , <code>boolean</code> , <code>string</code> , <code>symbol</code> , <code>number</code> y <code>object</code> .
Por ejemplo, las computadoras distinguen entre los números, como el número <code>12</code> , y las <code>strings</code> , como <code>&quot;12&quot;</code> , <code>&quot;dog&quot;</code> o <code>&quot;123 cats&quot;</code> , que son colecciones de caracteres. Las computadoras pueden realizar operaciones matemáticas en un número, pero no en una cadena.
<dfn>Las variables</dfn> permiten que las computadoras almacenen y manipulen datos de una manera dinámica. Hacen esto usando una &quot;etiqueta&quot; para señalar los datos en lugar de usar los datos en sí. Cualquiera de los siete tipos de datos puede almacenarse en una variable.
<code>Variables</code> son similares a las variables x e y que usa en matemáticas, lo que significa que son un nombre simple para representar los datos a los que queremos referirnos. Las <code>variables</code> computadora difieren de las variables matemáticas en que pueden almacenar diferentes valores en diferentes momentos.
Le pedimos a JavaScript que cree o <dfn>declare</dfn> una variable poniendo la palabra clave <code>var</code> delante de ella, así:
<blockquote>var ourName;</blockquote>
crea una <code>variable</code> llamada <code>ourName</code> . En JavaScript terminamos las frases con punto y coma.
<code>Variable</code> nombres de las <code>Variable</code> pueden estar formados por números, letras y <code>$</code> o <code>_</code> , pero no pueden contener espacios ni comenzar con un número.
</section>
## Instructions
<section id='instructions'>
Use la palabra clave <code>var</code> para crear una variable llamada <code>myName</code> .
<strong>Pista</strong> <br> Mira el ejemplo de <code>ourName</code> si te quedas atascado.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: &#39;Debes declarar <code>myName</code> con la palabra clave <code>var</code> , que termina con un punto y coma&#39;
testString: 'assert(/var\s+myName\s*;/.test(code), "You should declare <code>myName</code> with the <code>var</code> keyword, ending with a semicolon");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
// Example
var ourName;
// Declare myName below this line
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
var myName;
```
</section>

View File

@ -0,0 +1,72 @@
---
id: bd7123c9c444eddfaeb5bdef
title: Declare String Variables
localeTitle: Declarar variables de cadena
challengeType: 1
---
## Description
<section id='description'>
Anteriormente hemos utilizado el código
<code>var myName = &quot;your name&quot;;</code>
<code>&quot;your name&quot;</code> se llama una <dfn>cadena</dfn> <dfn>literal</dfn> . Es una cadena porque es una serie de cero o más caracteres entre comillas simples o dobles.
</section>
## Instructions
<section id='instructions'>
Crea dos nuevas variables de <code>string</code> : <code>myFirstName</code> y <code>myLastName</code> y asigna los valores de tu nombre y apellido, respectivamente.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>myFirstName</code> debe ser una cadena con al menos un carácter.
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> debe ser una cadena con al menos un carácter.
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.");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
// Example
var firstName = "Alan";
var lastName = "Turing";
// Only change code below this line
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
var myFirstName = "Alan";
var myLastName = "Turing";
```
</section>

View File

@ -0,0 +1,76 @@
---
id: 56533eb9ac21ba0edf2244ad
title: Decrement a Number with JavaScript
localeTitle: Disminuir un número con JavaScript
challengeType: 1
---
## Description
<section id='description'>
Puede <dfn>disminuir</dfn> o disminuir fácilmente una variable por una con el operador <code>--</code> .
<code>i--;</code>
es el equivalente de
<code>i = i - 1;</code>
<strong>Nota</strong> <br> La línea entera se convierte en <code>i--;</code> , eliminando la necesidad del signo igual.
</section>
## Instructions
<section id='instructions'>
Cambie el código para usar el operador <code>--</code> en <code>myVar</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>myVar</code> debe ser igual a <code>10</code>
testString: 'assert(myVar === 10, "<code>myVar</code> should equal <code>10</code>");'
- text: <code>myVar = myVar - 1;</code> debería ser cambiado
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: Utilice el <code>--</code> operador en <code>myVar</code>
testString: 'assert(/[-]{2}\s*myVar|myVar\s*[-]{2}/.test(code), "Use the <code>--</code> operator on <code>myVar</code>");'
- text: No cambie el código por encima de la línea
testString: 'assert(/var myVar = 11;/.test(code), "Do not change code above the line");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
var myVar = 11;
// Only change code below this line
myVar = myVar - 1;
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
var myVar = 11;
myVar--;
```
</section>

View File

@ -0,0 +1,100 @@
---
id: 56bbb991ad1ed5201cd392d3
title: Delete Properties from a JavaScript Object
localeTitle: Eliminar propiedades de un objeto de JavaScript
challengeType: 1
---
## Description
<section id='description'>
También podemos eliminar propiedades de objetos como este:
<code>delete ourDog.bark;</code>
</section>
## Instructions
<section id='instructions'>
Eliminar la propiedad <code>&quot;tails&quot;</code> de <code>myDog</code> . Puede usar la notación de punto o corchete.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: Eliminar la propiedad <code>&quot;tails&quot;</code> de <code>myDog</code> .
testString: 'assert(typeof myDog === "object" && myDog.tails === undefined, "Delete the property <code>"tails"</code> from <code>myDog</code>.");'
- text: No modifique la configuración de <code>myDog</code>
testString: 'assert(code.match(/"tails": 1/g).length > 1, "Do not modify the <code>myDog</code> setup");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
// Example
var ourDog = {
"name": "Camper",
"legs": 4,
"tails": 1,
"friends": ["everything!"],
"bark": "bow-wow"
};
delete ourDog.bark;
// Setup
var myDog = {
"name": "Happy Coder",
"legs": 4,
"tails": 1,
"friends": ["freeCodeCamp Campers"],
"bark": "woof"
};
// Only change code below this line.
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
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

@ -0,0 +1,65 @@
---
id: bd7993c9ca9feddfaeb7bdef
title: Divide One Decimal by Another with JavaScript
localeTitle: Divide un decimal por otro con JavaScript
challengeType: 1
---
## Description
<section id='description'>
Ahora dividamos un decimal por otro.
</section>
## Instructions
<section id='instructions'>
Cambie el <code>0.0</code> para que el <code>quotient</code> sea igual a <code>2.2</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: El <code>quotient</code> variable debe ser igual a <code>2.2</code>
testString: 'assert(quotient === 2.2, "The variable <code>quotient</code> should equal <code>2.2</code>");'
- text: Debes usar el operador <code>/</code> para dividir 4.4 por 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: La variable de cociente solo debe ser asignada una vez.
testString: 'assert(code.match(/quotient/g).length === 1, "The quotient variable should only be assigned once");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
var quotient = 0.0 / 2.0; // Fix this line
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
// solution required
```
</section>

View File

@ -0,0 +1,70 @@
---
id: cf1111c1c11feddfaeb6bdef
title: Divide One Number by Another with JavaScript
localeTitle: Divide un número por otro con JavaScript
challengeType: 1
---
## Description
<section id='description'>
También podemos dividir un número por otro.
JavaScript usa el símbolo <code>/</code> para la división.
<strong>Ejemplo</strong>
<blockquote>myVar = 16 / 2; // assigned 8</blockquote>
</section>
## Instructions
<section id='instructions'>
Cambia el <code>0</code> para que el <code>quotient</code> sea igual a <code>2</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: Haz que el <code>quotient</code> variable sea igual a 2.
testString: 'assert(quotient === 2, "Make the variable <code>quotient</code> equal to 2.");'
- text: Usa el operador <code>/</code>
testString: 'assert(/\d+\s*\/\s*\d+/.test(code), "Use the <code>/</code> operator");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
var quotient = 66 / 0;
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
var quotient = 66 / 33;
```
</section>

View File

@ -0,0 +1,79 @@
---
id: 56533eb9ac21ba0edf2244b6
title: Escape Sequences in Strings
localeTitle: Secuencias de escape en cuerdas
challengeType: 1
---
## Description
<section id='description'>
comillas no son los únicos caracteres que pueden <dfn>escaparse</dfn> dentro de una cadena. Hay dos razones para usar caracteres que se escapan: primero es permitirle usar caracteres que de otra forma no podría escribir, como un retroceso. El segundo es permitirte representar múltiples citas en una cadena sin que JavaScript interprete mal lo que quieres decir. Aprendimos esto en el reto anterior.
<table class="table table-striped"><thead><tr><th> Código </th><th> Salida </th></tr></thead><tbody><tr><td> <code>\&#39;</code> </td> <td> una frase </td></tr><tr><td> <code>\&quot;</code> </td> <td> doble cita </td></tr><tr><td> <code>\\</code> </td> <td> barra invertida </td></tr><tr><td> <code>\n</code> </td> <td> nueva línea </td></tr><tr><td> <code>\r</code> </td> <td> retorno de carro </td></tr><tr><td> <code>\t</code> </td> <td> lengüeta </td></tr><tr><td> <code>\b</code> </td> <td> retroceso </td></tr><tr><td> <code>\f</code> </td> <td> form feed </td></tr></tbody></table>
<em>Tenga en cuenta que la barra invertida debe escaparse para que se muestre como una barra invertida.</em>
</section>
## Instructions
<section id='instructions'>
Asigne las siguientes tres líneas de texto a la única variable <code>myStr</code> usando secuencias de escape.
<blockquote>FirstLine<br/>&nbsp;&nbsp;&nbsp;&nbsp;\SecondLine<br/>ThirdLine</blockquote>
Necesitará usar secuencias de escape para insertar caracteres especiales correctamente. También deberá seguir el espaciado como se ve arriba, sin espacios entre las secuencias de escape o las palabras.
Aquí está el texto con las secuencias de escape escritas.
<q>FirstLine <code>newline</code> <code>tab</code> <code>backslash</code> SecondLine <code>newline</code> ThirdLine</q>
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>myStr</code> no debe contener espacios
testString: 'assert(!/ /.test(myStr), "<code>myStr</code> should not contain any spaces");'
- text: &#39; <code>myStr</code> debe contener las cadenas <code>FirstLine</code> , <code>SecondLine</code> y <code>ThirdLine</code> (recuerda la sensibilidad a los casos)&#39;
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> debe ir seguido del carácter de nueva línea <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> debe contener un carácter de tabulación <code>\t</code> que sigue a un carácter de nueva línea
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> debe ir precedida por el carácter de barra invertida <code>\\</code>
testString: 'assert(/\SecondLine/.test(myStr), "<code>SecondLine</code> should be preceded by the backslash character <code>\\</code>");'
- text: Debe haber un carácter de nueva línea entre <code>SecondLine</code> y <code>ThirdLine</code>
testString: 'assert(/SecondLine\nThirdLine/.test(myStr), "There should be a newline character between <code>SecondLine</code> and <code>ThirdLine</code>");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
var myStr; // Change this line
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
var myStr = "FirstLine\n\t\\SecondLine\nThirdLine";
```
</section>

View File

@ -0,0 +1,70 @@
---
id: 56533eb9ac21ba0edf2244b5
title: Escaping Literal Quotes in Strings
localeTitle: Escapar de citas literales en cuerdas
challengeType: 1
---
## Description
<section id='description'>
Cuando está definiendo una cadena, debe comenzar y terminar con una comilla simple o doble. ¿Qué sucede cuando necesita una cita literal: <code>&quot;</code> o <code>&#39;</code> dentro de su cadena?
En JavaScript, puede <dfn>evitar que</dfn> una cita la considere como un final de cadena de la cadena colocando una <dfn>barra invertida</dfn> ( <code>\</code> ) delante de la cita.
<code>var sampleStr = &quot;Alan said, \&quot;Peter is learning JavaScript\&quot;.&quot;;</code>
Esto indica a JavaScript que la siguiente cita no es el final de la cadena, sino que debería aparecer dentro de la cadena. Por lo tanto, si imprimiera esto en En la consola, obtendrías:
<code>Alan said, &quot;Peter is learning JavaScript&quot;.</code>
</section>
## Instructions
<section id='instructions'>
Use <dfn>barras diagonales inversas</dfn> para asignar una cadena a la variable <code>myStr</code> modo que si tuviera que imprimirla en la consola, verá:
<code>I am a &quot;double quoted&quot; string inside &quot;double quotes&quot;.</code>
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: &#39;Debería usar dos comillas dobles ( <code>&quot;</code> ) y cuatro comillas dobles escapadas ( <code>\&quot;</code> ).&#39;
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: &#39;Variable myStr debe contener la cadena: <code>I am a &quot;double quoted&quot; string inside &quot;double quotes&quot;.</code> comilla <code>I am a &quot;double quoted&quot; string inside &quot;double quotes&quot;.</code> &#39;
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>");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
var myStr = ""; // Change this line
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
var myStr = "I am a \"double quoted\" string inside \"double quotes\".";
```
</section>

View File

@ -0,0 +1,85 @@
---
id: bd7123c9c448eddfaeb5bdef
title: Find the Length of a String
localeTitle: Encuentra la longitud de una cuerda
challengeType: 1
---
## Description
<section id='description'>
Puede encontrar la longitud de un valor de <code>String</code> escribiendo <code>.length</code> después de la variable de cadena o el literal de cadena.
<code>&quot;Alan Peter&quot;.length; // 10</code>
Por ejemplo, si creamos una variable <code>var firstName = &quot;Charles&quot;</code> , podríamos averiguar cuánto tiempo dura la cadena <code>&quot;Charles&quot;</code> utilizando la propiedad <code>firstName.length</code> .
</section>
## Instructions
<section id='instructions'>
Use la propiedad <code>.length</code> para contar el número de caracteres en la variable <code>lastName</code> y asignarla a <code>lastNameLength</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>lastNameLength</code> debe ser igual a ocho.
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: &#39;Deberías obtener la longitud del <code>lastName</code> al usar <code>.length</code> esta manera: <code>lastName.length</code> &#39;.
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>.");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
// Example
var firstNameLength = 0;
var firstName = "Ada";
firstNameLength = firstName.length;
// Setup
var lastNameLength = 0;
var lastName = "Lovelace";
// Only change code below this line.
lastNameLength = lastName;
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
var firstNameLength = 0;
var firstName = "Ada";
firstNameLength = firstName.length;
var lastNameLength = 0;
var lastName = "Lovelace";
lastNameLength = lastName.length;
```
</section>

View File

@ -0,0 +1,73 @@
---
id: 56533eb9ac21ba0edf2244ae
title: Finding a Remainder in JavaScript
localeTitle: Encontrar un resto en JavaScript
challengeType: 1
---
## Description
<section id='description'>
El operador <dfn>restante</dfn> <code>%</code> da el resto de la división de dos números.
<strong>Ejemplo</strong>
<blockquote>5 % 2 = 1 because<br>Math.floor(5 / 2) = 2 (Quotient)<br>2 * 2 = 4<br>5 - 4 = 1 (Remainder)</blockquote>
<strong>Usage</strong> <br> En matemáticas, se puede verificar que un número sea par o impar verificando el resto de la división del número entre <code>2</code> .
<blockquote>17 % 2 = 1 (17 is Odd)<br>48 % 2 = 0 (48 is Even)</blockquote>
<strong>Nota</strong> <br> El operador del <dfn>resto a</dfn> veces se denomina incorrectamente operador del &quot;módulo&quot;. Es muy similar al módulo, pero no funciona correctamente con números negativos.
</section>
## Instructions
<section id='instructions'>
Establezca el <code>remainder</code> igual al resto de <code>11</code> dividido por <code>3</code> usando el operador <dfn>resto</dfn> ( <code>%</code> ).
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: La variable <code>remainder</code> debe ser inicializada.
testString: 'assert(/var\s+?remainder/.test(code), "The variable <code>remainder</code> should be initialized");'
- text: El valor del <code>remainder</code> debe ser <code>2</code>
testString: 'assert(remainder === 2, "The value of <code>remainder</code> should be <code>2</code>");'
- text: Debes usar el operador <code>%</code>
testString: 'assert(/\s+?remainder\s*?=\s*?.*%.*;/.test(code), "You should use the <code>%</code> operator");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
// Only change code below this line
var remainder;
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
var remainder = 11 % 3;
```
</section>

View File

@ -0,0 +1,76 @@
---
id: cf1111c1c11feddfaeb9bdef
title: Generate Random Fractions with JavaScript
localeTitle: Generar fracciones aleatorias con JavaScript
challengeType: 1
---
## Description
<section id='description'>
Los números aleatorios son útiles para crear un comportamiento aleatorio.
JavaScript tiene una función <code>Math.random()</code> que genera un número decimal aleatorio entre <code>0</code> (incluido) y no hasta <code>1</code> (exclusivo). Por <code>Math.random()</code> tanto, <code>Math.random()</code> puede devolver un <code>0</code> pero nunca devolver completamente una <strong>Nota de</strong> <code>1</code>
<br> Al igual que el <a href='storing-values-with-the-assignment-operator' target='_blank'>almacenamiento de valores con el operador igual</a> , todas las llamadas de función se resolverán antes de que se ejecute la <code>return</code> , por lo que podemos <code>return</code> el valor de la función <code>Math.random()</code> .
</section>
## Instructions
<section id='instructions'>
Cambie <code>randomFraction</code> para devolver un número aleatorio en lugar de devolver <code>0</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>randomFraction</code> debería devolver un número aleatorio.
testString: 'assert(typeof randomFraction() === "number", "<code>randomFraction</code> should return a random number.");'
- text: El número devuelto por <code>randomFraction</code> debe ser un decimal.
testString: 'assert((randomFraction()+""). match(/\./g), "The number returned by <code>randomFraction</code> should be a decimal.");'
- text: Debería estar usando <code>Math.random</code> para generar el número decimal aleatorio.
testString: 'assert(code.match(/Math\.random/g).length >= 0, "You should be using <code>Math.random</code> to generate the random decimal number.");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
function randomFraction() {
// Only change code below this line.
return 0;
// Only change code above this line.
}
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
function randomFraction() {
return Math.random();
}
```
</section>

View File

@ -0,0 +1,82 @@
---
id: cf1111c1c12feddfaeb1bdef
title: Generate Random Whole Numbers with JavaScript
localeTitle: Generar números enteros al azar con JavaScript
challengeType: 1
---
## Description
<section id='description'>
Es genial que podamos generar números decimales aleatorios, pero es aún más útil si lo usamos para generar números enteros aleatorios.
<ol><li> Usa <code>Math.random()</code> para generar un decimal aleatorio. </li><li> Multiplica ese decimal aleatorio por <code>20</code> . </li><li> Use otra función, <code>Math.floor()</code> para redondear el número a su número entero más cercano. </li></ol>
Recuerda que <code>Math.random()</code> nunca puede devolver un <code>1</code> y, porque estamos redondeando, es imposible obtener <code>20</code> . Esta técnica nos dará un número entero entre <code>0</code> y <code>19</code> .
Poniendo todo junto, así es como se ve nuestro código:
<code>Math.floor(Math.random() * 20);</code>
Estamos llamando a <code>Math.random()</code> , multiplicamos el resultado por 20 y luego <code>Math.floor()</code> el valor a la función <code>Math.floor()</code> para redondear el valor al número entero más cercano.
</section>
## Instructions
<section id='instructions'>
Use esta técnica para generar y devolver un número entero aleatorio entre <code>0</code> y <code>9</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: El resultado de <code>randomWholeNum</code> debe ser un número entero.
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: Debería estar usando <code>Math.random</code> para generar un número aleatorio.
testString: 'assert(code.match(/Math.random/g).length > 1, "You should be using <code>Math.random</code> to generate a random number.");'
- text: Debería haber multiplicado el resultado de <code>Math.random</code> por 10 para que sea un número entre cero y nueve.
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: Debe usar <code>Math.floor</code> para eliminar la parte decimal del número.
testString: 'assert(code.match(/Math.floor/g).length > 1, "You should use <code>Math.floor</code> to remove the decimal part of the number.");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
var randomNumberBetween0and19 = Math.floor(Math.random() * 20);
function randomWholeNum() {
// Only change code below this line.
return Math.random();
}
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
var randomNumberBetween0and19 = Math.floor(Math.random() * 20);
function randomWholeNum() {
return Math.floor(Math.random() * 10);
}
```
</section>

View File

@ -0,0 +1,89 @@
---
id: cf1111c1c12feddfaeb2bdef
title: Generate Random Whole Numbers within a Range
localeTitle: Generar números enteros al azar dentro de un rango
challengeType: 1
---
## Description
<section id='description'>
En lugar de generar un número aleatorio entre cero y un número dado como hicimos antes, podemos generar un número aleatorio que se encuentre dentro de un rango de dos números específicos.
Para hacer esto, definiremos un número mínimo <code>min</code> y un máximo número <code>max</code> .
Aquí está la fórmula que usaremos. Tómese un momento para leerlo e intente entender lo que hace este código:
<code>Math.floor(Math.random() * (max - min + 1)) + min</code>
</section>
## Instructions
<section id='instructions'>
Cree una función llamada <code>randomRange</code> que tome un rango <code>myMin</code> y <code>myMax</code> y devuelva un número aleatorio que sea mayor o igual que <code>myMin</code> , y que sea menor o igual que <code>myMax</code> , inclusive.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: &#39;El número aleatorio más bajo que puede ser generado por <code>randomRange</code> debería ser igual a tu número mínimo, <code>myMin</code> &#39;.
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: &quot;El número aleatorio más alto que puede ser generado por <code>randomRange</code> debería ser igual a tu número máximo, <code>myMax</code> &quot;.
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: &#39;El número aleatorio generado por <code>randomRange</code> debe ser un número entero, no un decimal&#39;.
testString: 'assert(randomRange(0,1) % 1 === 0 , "The random number generated by <code>randomRange</code> should be an integer, not a decimal.");'
- text: &#39; <code>randomRange</code> debe usar <code>myMax</code> y <code>myMin</code> , y devolver un número aleatorio en tu rango&#39;.
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.");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
// Example
function ourRandomRange(ourMin, ourMax) {
return Math.floor(Math.random() * (ourMax - ourMin + 1)) + ourMin;
}
ourRandomRange(1, 9);
// Only change code below this line.
function randomRange(myMin, myMax) {
return 0; // Change this line
}
// Change these values to test your function
var myRandom = randomRange(5, 15);
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
function randomRange(myMin, myMax) {
return Math.floor(Math.random() * (myMax - myMin + 1)) + myMin;
}
```
</section>

View File

@ -0,0 +1,132 @@
---
id: 56533eb9ac21ba0edf2244be
title: Global Scope and Functions
localeTitle: Ámbito global y funciones
challengeType: 1
---
## Description
<section id='description'>
En JavaScript, el <dfn>alcance se</dfn> refiere a la visibilidad de las variables. Las variables que se definen fuera de un bloque de función tienen alcance <dfn>global</dfn> . Esto significa que pueden verse en todas partes en su código JavaScript.
Las variables que se utilizan sin la palabra clave <code>var</code> se crean automáticamente en el ámbito <code>global</code> . Esto puede crear consecuencias no deseadas en otra parte de su código o al ejecutar una función nuevamente. Siempre debes declarar tus variables con <code>var</code> .
</section>
## Instructions
<section id='instructions'>
Usando <code>var</code> , declare una variable <code>global</code> <code>myGlobal</code> fuera de cualquier función. Inicialízalo con un valor de <code>10</code> .
Dentro de la función <code>fun1</code> , asigne <code>5</code> a <code>oopsGlobal</code> <strong><em>sin</em></strong> usar la palabra clave <code>var</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>myGlobal</code> debe ser definido
testString: 'assert(typeof myGlobal != "undefined", "<code>myGlobal</code> should be defined");'
- text: <code>myGlobal</code> debe tener un valor de <code>10</code>
testString: 'assert(myGlobal === 10, "<code>myGlobal</code> should have a value of <code>10</code>");'
- text: <code>myGlobal</code> debe declararse usando la palabra clave <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> debe ser una variable global y tener un valor de <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>");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
// Declare your variable here
function fun1() {
// Assign 5 to oopsGlobal Here
}
// 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);
}
```
</div>
### Before Test
<div id='js-setup'>
```js
var logOutput = "";
var originalConsole = console
function capture() {
var nativeLog = console.log;
console.log = function (message) {
logOutput = message;
if(nativeLog.apply) {
nativeLog.apply(originalConsole, arguments);
} else {
var nativeMsg = Array.prototype.slice.apply(arguments).join(' ');
nativeLog(nativeMsg);
}
};
}
function uncapture() {
console.log = originalConsole.log;
}
var oopsGlobal;
capture();
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
// 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

@ -0,0 +1,76 @@
---
id: 56533eb9ac21ba0edf2244c0
title: Global vs. Local Scope in Functions
localeTitle: Ámbito global vs. local en funciones
challengeType: 1
---
## Description
<section id='description'>
Es posible tener variables <dfn>locales</dfn> y <dfn>globales</dfn> con el mismo nombre. Cuando haces esto, la variable <code>local</code> tiene prioridad sobre la variable <code>global</code> .
En este ejemplo:
<blockquote>var someVar = "Hat";<br>function myFun() {<br>&nbsp;&nbsp;var someVar = "Head";<br>&nbsp;&nbsp;return someVar;<br>}</blockquote>
La función <code>myFun</code> devolverá <code>&quot;Head&quot;</code> porque la versión <code>local</code> de la variable está presente.
</section>
## Instructions
<section id='instructions'>
Agregue una variable local a la función <code>myOutfit</code> para anular el valor de <code>outerWear</code> con <code>&quot;sweater&quot;</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: No cambie el valor de la <code>outerWear</code> global
testString: 'assert(outerWear === "T-Shirt", "Do not change the value of the global <code>outerWear</code>");'
- text: <code>myOutfit</code> debe devolver <code>&quot;sweater&quot;</code>
testString: 'assert(myOutfit() === "sweater", "<code>myOutfit</code> should return <code>"sweater"</code>");'
- text: No cambie la declaración de devolución
testString: 'assert(/return outerWear/.test(code), "Do not change the return statement");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
// Setup
var outerWear = "T-Shirt";
function myOutfit() {
// Only change code below this line
// Only change code above this line
return outerWear;
}
myOutfit();
```
</div>
</section>
## Solution
<section id='solution'>
```js
var outerWear = "T-Shirt";
function myOutfit() {
var outerWear = "sweater";
return outerWear;
}
```
</section>

View File

@ -0,0 +1,112 @@
---
id: 5664820f61c48e80c9fa476c
title: Golf Code
localeTitle: Codigo de golf
challengeType: 1
---
## Description
<section id='description'>
En el juego de <a href="https://en.wikipedia.org/wiki/Golf" target="_blank">golf,</a> cada hoyo tiene un <code>par</code> significa el número promedio de <code>strokes</code> que se espera que un golfista realice para hundir la bola en un hoyo para completar el juego. Dependiendo de qué tan por encima o <code>par</code> debajo de tus <code>strokes</code> , hay un apodo diferente.
Su función se pasará <code>par</code> y <code>strokes</code> argumentos. Devuelva la cadena correcta de acuerdo con esta tabla que enumera los trazos en orden de prioridad; arriba (más alto) a abajo (más bajo):
<table class="table table-striped"><thead><tr><th> Trazos </th><th> Regreso </th></tr></thead><tbody><tr><td> 1 </td><td> &quot;¡Hoyo en uno!&quot; </td></tr><tr><td> &lt;= par - 2 </td><td> &quot;Águila&quot; </td></tr><tr><td> par - 1 </td><td> &quot;Pajarito&quot; </td></tr><tr><td> par </td><td> &quot;Par&quot; </td></tr><tr><td> par + 1 </td><td> &quot;Espectro&quot; </td></tr><tr><td> par + 2 </td><td> &quot;Doble Bogey&quot; </td></tr><tr><td> &gt; = par + 3 </td><td> &quot;¡Vete a casa!&quot; </td></tr></tbody></table>
<code>par</code> y <code>strokes</code> siempre serán numéricos y positivos. Hemos agregado una matriz de todos los nombres para su conveniencia.
</section>
## Instructions
<section id='instructions'>
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: &#39; <code>golfScore(4, 1)</code> debe devolver &quot;Hole-in-one!&quot;&#39;
testString: 'assert(golfScore(4, 1) === "Hole-in-one!", "<code>golfScore(4, 1)</code> should return "Hole-in-one!"");'
- text: &#39; <code>golfScore(4, 2)</code> debe devolver &quot;Eagle&quot;&#39;
testString: 'assert(golfScore(4, 2) === "Eagle", "<code>golfScore(4, 2)</code> should return "Eagle"");'
- text: &#39; <code>golfScore(5, 2)</code> debe devolver &quot;Eagle&quot;&#39;
testString: 'assert(golfScore(5, 2) === "Eagle", "<code>golfScore(5, 2)</code> should return "Eagle"");'
- text: &#39; <code>golfScore(4, 3)</code> debe devolver &quot;Birdie&quot;&#39;
testString: 'assert(golfScore(4, 3) === "Birdie", "<code>golfScore(4, 3)</code> should return "Birdie"");'
- text: &#39; <code>golfScore(4, 4)</code> debe devolver &quot;Par&quot;
testString: 'assert(golfScore(4, 4) === "Par", "<code>golfScore(4, 4)</code> should return "Par"");'
- text: &#39; <code>golfScore(1, 1)</code> debe devolver &quot;Hole-in-one!&quot;&#39;
testString: 'assert(golfScore(1, 1) === "Hole-in-one!", "<code>golfScore(1, 1)</code> should return "Hole-in-one!"");'
- text: &#39; <code>golfScore(5, 5)</code> debe devolver &quot;Par&quot;
testString: 'assert(golfScore(5, 5) === "Par", "<code>golfScore(5, 5)</code> should return "Par"");'
- text: &#39; <code>golfScore(4, 5)</code> debería devolver &quot;Bogey&quot;&#39;
testString: 'assert(golfScore(4, 5) === "Bogey", "<code>golfScore(4, 5)</code> should return "Bogey"");'
- text: &#39; <code>golfScore(4, 6)</code> debería devolver &quot;Double Bogey&quot;&#39;
testString: 'assert(golfScore(4, 6) === "Double Bogey", "<code>golfScore(4, 6)</code> should return "Double Bogey"");'
- text: &#39; <code>golfScore(4, 7)</code> debe devolver &quot;Go Home!&quot;&#39;
testString: 'assert(golfScore(4, 7) === "Go Home!", "<code>golfScore(4, 7)</code> should return "Go Home!"");'
- text: &#39; <code>golfScore(5, 9)</code> debe devolver &quot;Go Home!&quot;&#39;
testString: 'assert(golfScore(5, 9) === "Go Home!", "<code>golfScore(5, 9)</code> should return "Go Home!"");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
var names = ["Hole-in-one!", "Eagle", "Birdie", "Par", "Bogey", "Double Bogey", "Go Home!"];
function golfScore(par, strokes) {
// Only change code below this line
return "Change Me";
// Only change code above this line
}
// Change these values to test
golfScore(5, 4);
```
</div>
</section>
## Solution
<section id='solution'>
```js
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

@ -0,0 +1,77 @@
---
id: 56533eb9ac21ba0edf2244ac
title: Increment a Number with JavaScript
localeTitle: Incrementar un número con JavaScript
challengeType: 1
---
## Description
<section id='description'>
Puede <dfn>incrementar</dfn> o agregar fácilmente uno a una variable con el operador <code>++</code> .
<code>i++;</code>
es el equivalente de
<code>i = i + 1;</code>
<strong>Nota</strong> <br> La línea entera se convierte en <code>i++;</code> , eliminando la necesidad del signo igual.
</section>
## Instructions
<section id='instructions'>
Cambie el código para usar el operador <code>++</code> en <code>myVar</code> .
<strong>Pista</strong> <br> Obtenga más información sobre los <a href="https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Increment_()" target="_blank">operadores aritméticos - Incremento (++)</a> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>myVar</code> debe ser igual a <code>88</code>
testString: 'assert(myVar === 88, "<code>myVar</code> should equal <code>88</code>");'
- text: <code>myVar = myVar + 1;</code> debería ser cambiado
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: Usa el operador <code>++</code>
testString: 'assert(/[+]{2}\s*myVar|myVar\s*[+]{2}/.test(code), "Use the <code>++</code> operator");'
- text: No cambie el código por encima de la línea
testString: 'assert(/var myVar = 87;/.test(code), "Do not change code above the line");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
var myVar = 87;
// Only change code below this line
myVar = myVar + 1;
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
var myVar = 87;
myVar++;
```
</section>

View File

@ -0,0 +1,67 @@
---
id: 56533eb9ac21ba0edf2244a9
title: Initializing Variables with the Assignment Operator
localeTitle: Inicializando variables con el operador de asignación
challengeType: 1
---
## Description
<section id='description'>
Es común <dfn>inicializar</dfn> una variable a un valor inicial en la misma línea que se declara.
<code>var myVar = 0;</code>
Crea una nueva variable llamada <code>myVar</code> y le asigna un valor inicial de <code>0</code> .
</section>
## Instructions
<section id='instructions'>
Defina una variable <code>a</code> con <code>var</code> e inicialícela a un valor de <code>9</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: Inicializar <code>a</code> a un valor de <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>");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
// Example
var ourVar = 19;
// Only change code below this line
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
var a = 9;
```
</section>

View File

@ -0,0 +1,90 @@
---
id: 56533eb9ac21ba0edf2244db
title: Introducing Else If Statements
localeTitle: Introduciendo Else If Sentencias
challengeType: 1
---
## Description
<section id='description'>
Si tiene varias condiciones que deben abordarse, puede encadenar <code>if</code> sentencias junto con <code>else if</code> sent.
<blockquote>if (num > 15) {<br>&nbsp;&nbsp;return "Bigger than 15";<br>} else if (num < 5) {<br>&nbsp;&nbsp;return "Smaller than 5";<br>} else {<br>&nbsp;&nbsp;return "Between 5 and 15";<br>}</blockquote>
</section>
## Instructions
<section id='instructions'>
Convertir la lógica para usar <code>else if</code> instrucciones.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: Debes tener al menos dos declaraciones <code>else</code>
testString: 'assert(code.match(/else/g).length > 1, "You should have at least two <code>else</code> statements");'
- text: Debes tener al menos dos declaraciones <code>if</code>
testString: 'assert(code.match(/if/g).length > 1, "You should have at least two <code>if</code> statements");'
- text: Usted debe tener que cerrar y abrir llaves para cada condición
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> debería devolver &quot;Más pequeño que 5&quot;
testString: 'assert(testElseIf(0) === "Smaller than 5", "<code>testElseIf(0)</code> should return "Smaller than 5"");'
- text: <code>testElseIf(5)</code> debe devolver &quot;Entre 5 y 10&quot;
testString: 'assert(testElseIf(5) === "Between 5 and 10", "<code>testElseIf(5)</code> should return "Between 5 and 10"");'
- text: <code>testElseIf(7)</code> debe devolver &quot;Entre 5 y 10&quot;
testString: 'assert(testElseIf(7) === "Between 5 and 10", "<code>testElseIf(7)</code> should return "Between 5 and 10"");'
- text: <code>testElseIf(10)</code> debe devolver &quot;Entre 5 y 10&quot;
testString: 'assert(testElseIf(10) === "Between 5 and 10", "<code>testElseIf(10)</code> should return "Between 5 and 10"");'
- text: <code>testElseIf(12)</code> debe devolver &quot;Más de 10&quot;
testString: 'assert(testElseIf(12) === "Greater than 10", "<code>testElseIf(12)</code> should return "Greater than 10"");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
function testElseIf(val) {
if (val > 10) {
return "Greater than 10";
}
if (val < 5) {
return "Smaller than 5";
}
return "Between 5 and 10";
}
// Change this value to test
testElseIf(7);
```
</div>
</section>
## Solution
<section id='solution'>
```js
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

@ -0,0 +1,92 @@
---
id: 56533eb9ac21ba0edf2244da
title: Introducing Else Statements
localeTitle: Introduciendo otras declaraciones
challengeType: 1
---
## Description
<section id='description'>
Cuando una condición para una sentencia <code>if</code> es verdadera, se ejecuta el bloque de código siguiente. ¿Qué pasa cuando esa condición es falsa? Normalmente no pasaría nada. Con una sentencia <code>else</code> , se puede ejecutar un bloque de código alternativo.
<blockquote>if (num > 10) {<br>&nbsp;&nbsp;return "Bigger than 10";<br>} else {<br>&nbsp;&nbsp;return "10 or Less";<br>}</blockquote>
</section>
## Instructions
<section id='instructions'>
Combine las sentencias <code>if</code> en una sola sentencia <code>if/else</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: Solo debes tener una sentencia <code>if</code> en el editor.
testString: 'assert(code.match(/if/g).length === 1, "You should only have one <code>if</code> statement in the editor");'
- text: Debes usar una sentencia <code>else</code>
testString: 'assert(/else/g.test(code), "You should use an <code>else</code> statement");'
- text: <code>testElse(4)</code> debe devolver &quot;5 o más pequeño&quot;
testString: 'assert(testElse(4) === "5 or Smaller", "<code>testElse(4)</code> should return "5 or Smaller"");'
- text: <code>testElse(5)</code> debe devolver &quot;5 o más pequeño&quot;
testString: 'assert(testElse(5) === "5 or Smaller", "<code>testElse(5)</code> should return "5 or Smaller"");'
- text: <code>testElse(6)</code> debe devolver &quot;Más grande que 5&quot;
testString: 'assert(testElse(6) === "Bigger than 5", "<code>testElse(6)</code> should return "Bigger than 5"");'
- text: <code>testElse(10)</code> debe devolver &quot;Más grande que 5&quot;
testString: 'assert(testElse(10) === "Bigger than 5", "<code>testElse(10)</code> should return "Bigger than 5"");'
- text: No cambie el código por encima o por debajo de las líneas.
testString: 'assert(/var result = "";/.test(code) && /return result;/.test(code), "Do not change the code above or below the lines.");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
function testElse(val) {
var result = "";
// Only change code below this line
if (val > 5) {
result = "Bigger than 5";
}
if (val <= 5) {
result = "5 or Smaller";
}
// Only change code above this line
return result;
}
// Change this value to test
testElse(4);
```
</div>
</section>
## Solution
<section id='solution'>
```js
function testElse(val) {
var result = "";
if(val > 5) {
result = "Bigger than 5";
} else {
result = "5 or Smaller";
}
return result;
}
```
</section>

View File

@ -0,0 +1,86 @@
---
id: 56104e9e514f539506016a5c
title: Iterate Odd Numbers With a For Loop
localeTitle: Iterar números impares con un bucle for
challengeType: 1
---
## Description
<section id='description'>
Para que los bucles no tengan que iterar uno a la vez. Al cambiar nuestra <code>final-expression</code> , podemos contar por números pares.
Comenzaremos en <code>i = 0</code> y haremos un bucle mientras que <code>i &lt; 10</code> . Incrementaremos <code>i</code> en 2 en cada bucle con <code>i += 2</code> .
<blockquote>var ourArray = [];<br>for (var i = 0; i &#60; 10; i += 2) {<br>&nbsp;&nbsp;ourArray.push(i);<br>}</blockquote>
<code>ourArray</code> ahora contendrá <code>[0,2,4,6,8]</code> .
Cambiemos nuestra <code>initialization</code> para que podamos contar por números impares.
</section>
## Instructions
<section id='instructions'>
Empuje los números impares del 1 al 9 a <code>myArray</code> usando un bucle <code>for</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: Usted debe estar usando una <code>for</code> bucle para esto.
testString: 'assert(code.match(/for\s*\(/g).length > 1, "You should be using a <code>for</code> loop for this.");'
- text: &#39; <code>myArray</code> debería ser igual a <code>[1,3,5,7,9]</code> .&#39;
testString: 'assert.deepEqual(myArray, [1,3,5,7,9], "<code>myArray</code> should equal <code>[1,3,5,7,9]</code>.");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
// Example
var ourArray = [];
for (var i = 0; i < 10; i += 2) {
ourArray.push(i);
}
// Setup
var myArray = [];
// Only change code below this line.
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
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

@ -0,0 +1,94 @@
---
id: 5675e877dbd60be8ad28edc6
title: Iterate Through an Array with a For Loop
localeTitle: Iterar a través de una matriz con un bucle For
challengeType: 1
---
## Description
<section id='description'>
Una tarea común en JavaScript es iterar a través del contenido de una matriz. Una forma de hacerlo es con un bucle <code>for</code> . Este código dará salida a cada elemento de la matriz <code>arr</code> a la consola:
<blockquote>var arr = [10,9,8,7,6];<br>for (var i = 0; i < arr.length; i++) {<br>&nbsp;&nbsp; console.log(arr[i]);<br>}</blockquote>
Recuerde que las matrices tienen numeración basada en cero, lo que significa que el último índice de la matriz es la longitud - 1. Nuestra <dfn>condición</dfn> para este bucle es <code>i &lt; arr.length</code> , que se detiene cuando <code>i</code> tiene la longitud - 1.
</section>
## Instructions
<section id='instructions'>
Declarar e inicializar una variable <code>total</code> a <code>0</code> . Use un bucle <code>for</code> para agregar el valor de cada elemento de la matriz <code>myArr</code> al <code>total</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>total</code> debe ser declarado e inicializado a 0
testString: 'assert(code.match(/var.*?total\s*=\s*0.*?;/), "<code>total</code> should be declared and initialized to 0");'
- text: <code>total</code> debe ser igual a 20
testString: 'assert(total === 20, "<code>total</code> should equal 20");'
- text: Debe usar un bucle <code>for</code> para iterar a través de <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: No establezca el <code>total</code> a 20 directamente
testString: 'assert(!code.match(/total[\s\+\-]*=\s*(\d(?!\s*[;,])|[1-9])/g), "Do not set <code>total</code> to 20 directly");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
// Example
var ourArr = [ 9, 10, 11, 12];
var ourTotal = 0;
for (var i = 0; i < ourArr.length; i++) {
ourTotal += ourArr[i];
}
// Setup
var myArr = [ 2, 3, 4, 5, 6];
// Only change code below this line
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
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

@ -0,0 +1,91 @@
---
id: 5a2efd662fb457916e1fe604
title: Iterate with JavaScript Do...While Loops
localeTitle: Iterar con JavaScript Do ... While Loops
challengeType: 1
---
## Description
<section id='description'>
Puede ejecutar el mismo código varias veces utilizando un bucle.
El siguiente tipo de bucle que aprenderá se llama bucle &quot; <code>do...while</code> &quot; porque primero &quot; <code>do</code> &quot; una pasada del código dentro del bucle sin importar qué, y luego se ejecuta &quot; <code>while</code> &quot; una condición específica es verdadero y se detiene una vez que esa condición ya no es verdadera. Veamos un ejemplo.
<blockquote>var ourArray = [];<br>var i = 0;<br>do {<br>&nbsp;&nbsp;ourArray.push(i);<br>&nbsp;&nbsp;i++;<br>} while (i < 5);</blockquote>
Esto se comporta como se esperaría con cualquier otro tipo de bucle, y la matriz resultante se verá como <code>[0, 1, 2, 3, 4]</code> . Sin embargo, lo que hace <code>do...while</code> diferente de otros bucles es cómo se comporta cuando la condición falla en la primera comprobación. Veamos esto en acción.
Aquí hay un bucle while común que ejecutará el código en el bucle siempre y cuando <code>i &lt; 5</code> .
<blockquote>var ourArray = []; <br>var i = 5;<br>while (i < 5) {<br>&nbsp;&nbsp;ourArray.push(i);<br>&nbsp;&nbsp;i++;<br>}</blockquote>
Observe que inicializamos el valor de <code>i</code> en 5. Cuando ejecutamos la siguiente línea, notamos que <code>i</code> no es menor que 5. Por lo tanto, no ejecutamos el código dentro del bucle. El resultado es que <code>ourArray</code> no agregará nada, por lo que aún se verá así <code>[]</code> cuando todo el código del ejemplo anterior termine de ejecutarse.
Ahora, eche un vistazo a un <code>do...while</code> loop.
<blockquote>var ourArray = []; <br>var i = 5;<br>do {<br>&nbsp;&nbsp;ourArray.push(i);<br>&nbsp;&nbsp;i++;<br>} while (i < 5);</blockquote>
En este caso, inicializamos el valor de <code>i</code> como 5, como hicimos con el bucle while. Cuando llegamos a la siguiente línea, no hay comprobación del valor de <code>i</code> , por lo que vamos al código dentro de las llaves y lo ejecutamos. Agregaremos un elemento a la matriz e incrementaremos <code>i</code> antes de llegar a la verificación de condición. Entonces, cuando se llega a comprobar si <code>i &lt; 5</code> ver que <code>i</code> es ahora de 6 años, que no pasa la comprobación condicional. Así que salimos del bucle y estamos listos. Al final del ejemplo anterior, el valor de <code>ourArray</code> es <code>[5]</code> .
Esencialmente, un bucle <code>do...while</code> while garantiza que el código dentro del bucle se ejecute al menos una vez.
Intentemos obtener un ciclo <code>do...while</code> while para que funcione presionando los valores en una matriz.
</section>
## Instructions
<section id='instructions'>
Cambiar el <code>while</code> de bucle en el código a un <code>do...while</code> bucle de modo que el bucle empujará el número 10 a <code>myArray</code> , y <code>i</code> será igual a <code>11</code> cuando el código termina de ejecutarse.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: Deberías usar un bucle <code>do...while</code> while para esto.
testString: 'assert(code.match(/do/g), "You should be using a <code>do...while</code> loop for this.");'
- text: &#39; <code>myArray</code> debería ser igual a <code>[10]</code> &#39;.
testString: 'assert.deepEqual(myArray, [10], "<code>myArray</code> should equal <code>[10]</code>.");'
- text: <code>i</code> debe ser igual a <code>11</code>
testString: 'assert.deepEqual(i, 11, "<code>i</code> should equal <code>11</code>");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
// Setup
var myArray = [];
var i = 10;
// Only change code below this line.
while (i < 5) {
myArray.push(i);
i++;
}
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
var myArray = [];
var i = 10;
do {
myArray.push(i);
i++;
} while (i < 5)
```
</section>

View File

@ -0,0 +1,91 @@
---
id: cf1111c1c11feddfaeb5bdef
title: Iterate with JavaScript For Loops
localeTitle: Iterar con JavaScript para bucles
challengeType: 1
---
## Description
<section id='description'>
Puede ejecutar el mismo código varias veces utilizando un bucle.
El tipo más común de bucle de JavaScript se llama &quot; <code>for loop</code> &quot; porque se ejecuta &quot;por&quot; un número específico de veces.
Para los bucles se declaran con tres expresiones opcionales separadas por punto y coma:
<code>for ([initialization]; [condition]; [final-expression])</code>
La instrucción de <code>initialization</code> se ejecuta una sola vez antes de que comience el bucle. Normalmente se utiliza para definir y configurar su variable de bucle.
La declaración de <code>condition</code> se evalúa al comienzo de cada iteración de bucle y continuará mientras se evalúe como <code>true</code> . Cuando la <code>condition</code> es <code>false</code> al inicio de la iteración, el bucle dejará de ejecutarse. Esto significa que si la <code>condition</code> comienza como <code>false</code> , su bucle nunca se ejecutará.
La <code>final-expression</code> se ejecuta al final de cada iteración de bucle, antes de la siguiente verificación de <code>condition</code> y generalmente se usa para aumentar o disminuir su contador de bucle.
En el siguiente ejemplo, inicializamos con <code>i = 0</code> e iteramos mientras nuestra condición <code>i &lt; 5</code> es verdadera. Incrementaremos <code>i</code> en <code>1</code> en cada iteración de bucle con <code>i++</code> como nuestra <code>final-expression</code> .
<blockquote>var ourArray = [];<br>for (var i = 0; i &#60; 5; i++) {<br>&nbsp;&nbsp;ourArray.push(i);<br>}</blockquote>
<code>ourArray</code> ahora contendrá <code>[0,1,2,3,4]</code> .
</section>
## Instructions
<section id='instructions'>
Use un bucle <code>for</code> para trabajar y empujar los valores del 1 al 5 en <code>myArray</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: Usted debe estar usando una <code>for</code> bucle para esto.
testString: 'assert(code.match(/for\s*\(/g).length > 1, "You should be using a <code>for</code> loop for this.");'
- text: &#39; <code>myArray</code> debe ser igual a <code>[1,2,3,4,5]</code> .&#39;
testString: 'assert.deepEqual(myArray, [1,2,3,4,5], "<code>myArray</code> should equal <code>[1,2,3,4,5]</code>.");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
// Example
var ourArray = [];
for (var i = 0; i < 5; i++) {
ourArray.push(i);
}
// Setup
var myArray = [];
// Only change code below this line.
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
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

@ -0,0 +1,76 @@
---
id: cf1111c1c11feddfaeb1bdef
title: Iterate with JavaScript While Loops
localeTitle: Iterar con JavaScript mientras bucles
challengeType: 1
---
## Description
<section id='description'>
Puede ejecutar el mismo código varias veces utilizando un bucle.
El primer tipo de bucle vamos a aprender se llama un &quot; <code>while</code> &quot; bucle porque funciona &quot;mientras que&quot; una condición especificada es verdadera y se detiene una vez que la condición ya no es cierto.
<blockquote>var ourArray = [];<br>var i = 0;<br>while(i &#60; 5) {<br>&nbsp;&nbsp;ourArray.push(i);<br>&nbsp;&nbsp;i++;<br>}</blockquote>
Intentemos que funcione un bucle while empujando los valores a una matriz.
</section>
## Instructions
<section id='instructions'>
Empuje los números de 0 a 4 para <code>myArray</code> usando un <code>while</code> de bucle.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: Usted debe utilizar un <code>while</code> de bucle para esto.
testString: 'assert(code.match(/while/g), "You should be using a <code>while</code> loop for this.");'
- text: &#39; <code>myArray</code> debe ser igual a <code>[0,1,2,3,4]</code> .&#39;
testString: 'assert.deepEqual(myArray, [0,1,2,3,4], "<code>myArray</code> should equal <code>[0,1,2,3,4]</code>.");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
// Setup
var myArray = [];
// Only change code below this line.
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
var myArray = [];
var i = 0;
while(i < 5) {
myArray.push(i);
i++;
}
```
</section>

View File

@ -0,0 +1,111 @@
---
id: 56533eb9ac21ba0edf2244bf
title: Local Scope and Functions
localeTitle: Ámbito local y funciones
challengeType: 1
---
## Description
<section id='description'>
Las variables que se declaran dentro de una función, así como los parámetros de la función tienen alcance <dfn>local</dfn> . Eso significa que, sólo son visibles dentro de esa función.
Aquí hay una función <code>myTest</code> con una variable local llamada <code>loc</code> .
<blockquote>function myTest() {<br>&nbsp;&nbsp;var loc = "foo";<br>&nbsp;&nbsp;console.log(loc);<br>}<br>myTest(); // logs "foo"<br>console.log(loc); // loc is not defined</blockquote>
<code>loc</code> no está definido fuera de la función.
</section>
## Instructions
<section id='instructions'>
Declare una variable local <code>myVar</code> dentro de <code>myLocalScope</code> . Ejecute las pruebas y luego siga las instrucciones comentadas en el editor.
<strong>Pista</strong> <br> Actualizar la página puede ayudar si te quedas atascado.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: Ninguna variable global <code>myVar</code>
testString: 'assert(typeof myVar === "undefined", "No global <code>myVar</code> variable");'
- text: Agrega una variable <code>myVar</code> local
testString: 'assert(/var\s+myVar/.test(code), "Add a local <code>myVar</code> variable");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
function myLocalScope() {
'use strict'; // you shouldn't need to edit this line
console.log(myVar);
}
myLocalScope();
// Run and check the console
// myVar is not defined outside of myLocalScope
console.log(myVar);
// Now remove the console log line to pass the test
```
</div>
### Before Test
<div id='js-setup'>
```js
var logOutput = "";
var originalConsole = console
function capture() {
var nativeLog = console.log;
console.log = function (message) {
logOutput = message;
if(nativeLog.apply) {
nativeLog.apply(originalConsole, arguments);
} else {
var nativeMsg = Array.prototype.slice.apply(arguments).join(' ');
nativeLog(nativeMsg);
}
};
}
function uncapture() {
console.log = originalConsole.log;
}
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
function myLocalScope() {
'use strict';
var myVar;
console.log(myVar);
}
myLocalScope();
```
</section>

View File

@ -0,0 +1,84 @@
---
id: 5690307fddb111c6084545d7
title: Logical Order in If Else Statements
localeTitle: Orden lógico en si otras declaraciones
challengeType: 1
---
## Description
<section id='description'>
orden es importante en <code>if</code> , <code>else if</code> declaraciones.
La función se ejecuta de arriba a abajo, por lo que deberá tener cuidado con la afirmación que aparece primero.
Toma estas dos funciones como ejemplo.
Aquí está el primero:
<blockquote>function foo(x) {<br>&nbsp;&nbsp;if (x < 1) {<br>&nbsp;&nbsp;&nbsp;&nbsp;return "Less than one";<br>&nbsp;&nbsp;} else if (x < 2) {<br>&nbsp;&nbsp;&nbsp;&nbsp;return "Less than two";<br>&nbsp;&nbsp;} else {<br>&nbsp;&nbsp;&nbsp;&nbsp;return "Greater than or equal to two";<br>&nbsp;&nbsp;}<br>}</blockquote>
Y el segundo solo cambia el orden de las declaraciones:
<blockquote>function bar(x) {<br>&nbsp;&nbsp;if (x < 2) {<br>&nbsp;&nbsp;&nbsp;&nbsp;return "Less than two";<br>&nbsp;&nbsp;} else if (x < 1) {<br>&nbsp;&nbsp;&nbsp;&nbsp;return "Less than one";<br>&nbsp;&nbsp;} else {<br>&nbsp;&nbsp;&nbsp;&nbsp;return "Greater than or equal to two";<br>&nbsp;&nbsp;}<br>}</blockquote>
Si bien estas dos funciones parecen casi idénticas, si pasamos un número a ambas obtenemos diferentes salidas.
<blockquote>foo(0) // "Less than one"<br>bar(0) // "Less than two"</blockquote>
</section>
## Instructions
<section id='instructions'>
Cambie el orden de la lógica en la función para que devuelva las declaraciones correctas en todos los casos.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>orderMyLogic(4)</code> debe devolver &quot;Menos de 5&quot;
testString: 'assert(orderMyLogic(4) === "Less than 5", "<code>orderMyLogic(4)</code> should return "Less than 5"");'
- text: <code>orderMyLogic(6)</code> debe devolver &quot;Menos de 10&quot;
testString: 'assert(orderMyLogic(6) === "Less than 10", "<code>orderMyLogic(6)</code> should return "Less than 10"");'
- text: <code>orderMyLogic(11)</code> debe devolver &quot;Mayor o igual a 10&quot;
testString: 'assert(orderMyLogic(11) === "Greater than or equal to 10", "<code>orderMyLogic(11)</code> should return "Greater than or equal to 10"");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
function orderMyLogic(val) {
if (val < 10) {
return "Less than 10";
} else if (val < 5) {
return "Less than 5";
} else {
return "Greater than or equal to 10";
}
}
// Change this value to test
orderMyLogic(7);
```
</div>
</section>
## Solution
<section id='solution'>
```js
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

@ -0,0 +1,80 @@
---
id: 56bbb991ad1ed5201cd392cc
title: Manipulate Arrays With pop()
localeTitle: Manipular matrices con pop ()
challengeType: 1
---
## Description
<section id='description'>
Otra forma de cambiar los datos en una matriz es con la función <code>.pop()</code> .
<code>.pop()</code> se usa para &quot; <code>.pop()</code> &quot; un valor del final de una matriz. Podemos almacenar este valor &quot;extraído&quot; asignándolo a una variable. En otras palabras, <code>.pop()</code> elimina el último elemento de una matriz y devuelve ese elemento.
Cualquier tipo de entrada se puede &quot;extraer&quot; de una matriz: números, cadenas, incluso matrices anidadas.
<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'>
Use la función <code>.pop()</code> para eliminar el último elemento de <code>myArray</code> , asignando el valor de &quot;desprendimiento de&quot; a <code>removedFromMyArray</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: &#39; <code>myArray</code> solo debe contener <code>[[&quot;John&quot;, 23]]</code> .&#39;
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: Usa <code>pop()</code> en <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: &#39; <code>removedFromMyArray</code> solo debe contener <code>[&quot;cat&quot;, 2]</code> .&#39;
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>.");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
// Example
var ourArray = [1,2,3];
var removedFromOurArray = ourArray.pop();
// removedFromOurArray now equals 3, and ourArray now equals [1,2]
// Setup
var myArray = [["John", 23], ["cat", 2]];
// Only change code below this line.
var removedFromMyArray;
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
var myArray = [["John", 23], ["cat", 2]];
var removedFromMyArray = myArray.pop();
```
</section>

View File

@ -0,0 +1,74 @@
---
id: 56bbb991ad1ed5201cd392cb
title: Manipulate Arrays With push()
localeTitle: Manipular matrices con empuje ()
challengeType: 1
---
## Description
<section id='description'>
Una forma fácil de agregar datos al final de una matriz es a través de la función <code>push()</code> .
<code>.push()</code> toma uno o más <dfn>parámetros</dfn> y los &quot;empuja&quot; al final de la matriz.
<blockquote>var arr = [1,2,3];<br>arr.push(4);<br>// arr is now [1,2,3,4]</blockquote>
</section>
## Instructions
<section id='instructions'>
Presione <code>[&quot;dog&quot;, 3]</code> en el extremo de la variable <code>myArray</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: &#39; <code>myArray</code> ahora debe ser igual a <code>[[&quot;John&quot;, 23], [&quot;cat&quot;, 2], [&quot;dog&quot;, 3]]</code> .&#39;
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>.");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
// Example
var ourArray = ["Stimpson", "J", "cat"];
ourArray.push(["happy", "joy"]);
// ourArray now equals ["Stimpson", "J", "cat", ["happy", "joy"]]
// Setup
var myArray = [["John", 23], ["cat", 2]];
// Only change code below this line.
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
var myArray = [["John", 23], ["cat", 2]];
myArray.push(["dog",3]);
```
</section>

View File

@ -0,0 +1,78 @@
---
id: 56bbb991ad1ed5201cd392cd
title: Manipulate Arrays With shift()
localeTitle: Manipular matrices con cambio ()
challengeType: 1
---
## Description
<section id='description'>
<code>pop()</code> siempre elimina el último elemento de una matriz. ¿Qué pasa si quieres eliminar el primero?
Ahí es donde <code>.shift()</code> en <code>.shift()</code> . Funciona igual que <code>.pop()</code> , excepto que elimina el primer elemento en lugar del último.
</section>
## Instructions
<section id='instructions'>
Use la función <code>.shift()</code> para eliminar el primer elemento de <code>myArray</code> , asignando el valor &quot;desviado&quot; a <code>removedFromMyArray</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: &#39; <code>myArray</code> ahora debe ser igual a <code>[[&quot;dog&quot;, 3]]</code> .&#39;
testString: 'assert((function(d){if(d[0][0] == "dog" && d[0][1] === 3 && d[1] == undefined){return true;}else{return false;}})(myArray), "<code>myArray</code> should now equal <code>[["dog", 3]]</code>.");'
- text: &#39; <code>removedFromMyArray</code> debe contener <code>[&quot;John&quot;, 23]</code> .&#39;
testString: 'assert((function(d){if(d[0] == "John" && d[1] === 23 && typeof removedFromMyArray === "object"){return true;}else{return false;}})(removedFromMyArray), "<code>removedFromMyArray</code> should contain <code>["John", 23]</code>.");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
// Example
var ourArray = ["Stimpson", "J", ["cat"]];
var removedFromOurArray = ourArray.shift();
// removedFromOurArray now equals "Stimpson" and ourArray now equals ["J", ["cat"]].
// Setup
var myArray = [["John", 23], ["dog", 3]];
// Only change code below this line.
var removedFromMyArray;
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
var myArray = [["John", 23], ["dog", 3]];
// Only change code below this line.
var removedFromMyArray = myArray.shift();
```
</section>

View File

@ -0,0 +1,76 @@
---
id: 56bbb991ad1ed5201cd392ce
title: Manipulate Arrays With unshift()
localeTitle: Manipular matrices con unshift ()
challengeType: 1
---
## Description
<section id='description'>
No solo puede <code>shift</code> elementos del principio de una matriz, <code>unshift</code> también puede <code>unshift</code> elementos al principio de una matriz, es decir, agregar elementos delante de la matriz.
<code>.unshift()</code> funciona exactamente como <code>.push()</code> , pero en lugar de agregar el elemento al final de la matriz, <code>unshift()</code> agrega el elemento al principio de la matriz.
</section>
## Instructions
<section id='instructions'>
Añadir <code>[&quot;Paul&quot;,35]</code> para el inicio de la <code>myArray</code> variable usando <code>unshift()</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: &#39; <code>myArray</code> debería tener ahora [[&quot;Paul&quot;, 35], [&quot;dog&quot;, 3]].&#39;
testString: 'assert((function(d){if(typeof d[0] === "object" && d[0][0] == "Paul" && d[0][1] === 35 && d[1][0] != undefined && d[1][0] == "dog" && d[1][1] != undefined && d[1][1] == 3){return true;}else{return false;}})(myArray), "<code>myArray</code> should now have [["Paul", 35], ["dog", 3]].");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
// Example
var ourArray = ["Stimpson", "J", "cat"];
ourArray.shift(); // ourArray now equals ["J", "cat"]
ourArray.unshift("Happy");
// ourArray now equals ["Happy", "J", "cat"]
// Setup
var myArray = [["John", 23], ["dog", 3]];
myArray.shift();
// Only change code below this line.
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
var myArray = [["John", 23], ["dog", 3]];
myArray.shift();
myArray.unshift(["Paul", 35]);
```
</section>

View File

@ -0,0 +1,120 @@
---
id: 56533eb9ac21ba0edf2244cb
title: Manipulating Complex Objects
localeTitle: Manipulando objetos complejos
challengeType: 1
---
## Description
<section id='description'>
A veces es posible que desee almacenar datos en una <dfn>estructura de datos</dfn> flexible. Un objeto JavaScript es una forma de manejar datos flexibles. Permiten combinaciones arbitrarias de <dfn>cadenas</dfn> , <dfn>números</dfn> , <dfn>booleanos</dfn> , <dfn>matrices</dfn> , <dfn>funciones</dfn> y <dfn>objetos</dfn> .
Aquí hay un ejemplo de una estructura de datos compleja:
<blockquote>var ourMusic = [<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;"artist": "Daft Punk",<br>&nbsp;&nbsp;&nbsp;&nbsp;"title": "Homework",<br>&nbsp;&nbsp;&nbsp;&nbsp;"release_year": 1997,<br>&nbsp;&nbsp;&nbsp;&nbsp;"formats": [ <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"CD", <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Cassette", <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"LP"<br>&nbsp;&nbsp;&nbsp;&nbsp;],<br>&nbsp;&nbsp;&nbsp;&nbsp;"gold": true<br>&nbsp;&nbsp;}<br>];</blockquote>
Esta es una matriz que contiene un objeto dentro. El objeto tiene varias piezas de <dfn>metadatos</dfn> sobre un álbum. También tiene una matriz de <code>&quot;formats&quot;</code> anidados. Si desea agregar más registros de álbum, puede hacerlo agregando registros a la matriz de nivel superior.
objetos contienen datos en una propiedad, que tiene un formato de clave-valor. En el ejemplo anterior, <code>&quot;artist&quot;: &quot;Daft Punk&quot;</code> es una propiedad que tiene una clave de <code>&quot;artist&quot;</code> y un valor de <code>&quot;Daft Punk&quot;</code> .
<a href='http://www.json.org/' target=_blank>JavaScript Object Notation</a> o <code>JSON</code> es un formato de intercambio de datos relacionado que se utiliza para almacenar datos.
<blockquote>{<br>&nbsp;&nbsp;"artist": "Daft Punk",<br>&nbsp;&nbsp;"title": "Homework",<br>&nbsp;&nbsp;"release_year": 1997,<br>&nbsp;&nbsp;"formats": [ <br>&nbsp;&nbsp;&nbsp;&nbsp;"CD",<br>&nbsp;&nbsp;&nbsp;&nbsp;"Cassette",<br>&nbsp;&nbsp;&nbsp;&nbsp;"LP"<br>&nbsp;&nbsp;],<br>&nbsp;&nbsp;"gold": true<br>}</blockquote>
<strong>Nota</strong> <br> Deberá colocar una coma después de cada objeto de la matriz, a menos que sea el último objeto de la matriz.
</section>
## Instructions
<section id='instructions'>
Agrega un nuevo álbum a la matriz <code>myMusic</code> . Agregue cadenas de <code>artist</code> y <code>title</code> , número de año de <code>release_year</code> y una matriz de <code>formats</code> de cadenas.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>myMusic</code> debería ser una matriz
testString: 'assert(Array.isArray(myMusic), "<code>myMusic</code> should be an array");'
- text: <code>myMusic</code> debería tener al menos dos elementos
testString: 'assert(myMusic.length > 1, "<code>myMusic</code> should have at least two elements");'
- text: &#39; <code>myMusic[1]</code> debería ser un objeto&#39;
testString: 'assert(typeof myMusic[1] === "object", "<code>myMusic[1]</code> should be an object");'
- text: &#39; <code>myMusic[1]</code> debería tener al menos 4 propiedades&#39;
testString: 'assert(Object.keys(myMusic[1]).length > 3, "<code>myMusic[1]</code> should have at least 4 properties");'
- text: &#39; <code>myMusic[1]</code> debe contener una propiedad de <code>artist</code> que es una cadena&#39;
testString: 'assert(myMusic[1].hasOwnProperty("artist") && typeof myMusic[1].artist === "string", "<code>myMusic[1]</code> should contain an <code>artist</code> property which is a string");'
- text: &#39; <code>myMusic[1]</code> debe contener una propiedad de <code>title</code> que es una cadena&#39;
testString: 'assert(myMusic[1].hasOwnProperty("title") && typeof myMusic[1].title === "string", "<code>myMusic[1]</code> should contain a <code>title</code> property which is a string");'
- text: &#39; <code>myMusic[1]</code> debe contener una propiedad <code>release_year</code> que es un número&#39;
testString: 'assert(myMusic[1].hasOwnProperty("release_year") && typeof myMusic[1].release_year === "number", "<code>myMusic[1]</code> should contain a <code>release_year</code> property which is a number");'
- text: &#39; <code>myMusic[1]</code> debe contener una propiedad de <code>formats</code> que es una matriz&#39;
testString: 'assert(myMusic[1].hasOwnProperty("formats") && Array.isArray(myMusic[1].formats), "<code>myMusic[1]</code> should contain a <code>formats</code> property which is an array");'
- text: <code>formats</code> deben ser una matriz de cadenas con al menos dos elementos.
testString: 'assert(myMusic[1].formats.every(function(item) { return (typeof item === "string")}) && myMusic[1].formats.length > 1, "<code>formats</code> should be an array of strings with at least two elements");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
var myMusic = [
{
"artist": "Billy Joel",
"title": "Piano Man",
"release_year": 1973,
"formats": [
"CD",
"8T",
"LP"
],
"gold": true
}
// Add record here
];
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
var myMusic = [
{
"artist": "Billy Joel",
"title": "Piano Man",
"release_year": 1973,
"formats": [
"CS",
"8T",
"LP" ],
"gold": true
},
{
"artist": "ABBA",
"title": "Ring Ring",
"release_year": 1973,
"formats": [
"CS",
"8T",
"LP",
"CD",
]
}
];
```
</section>

View File

@ -0,0 +1,76 @@
---
id: cf1111c1c11feddfaeb8bdef
title: Modify Array Data With Indexes
localeTitle: Modificar datos de matriz con índices
challengeType: 1
---
## Description
<section id='description'>
A diferencia de las cadenas, las entradas de matrices son <dfn>mutables</dfn> y se pueden cambiar libremente.
<strong>Ejemplo</strong>
<blockquote>var ourArray = [50,40,30];<br>ourArray[0] = 15; // equals [15,40,30]</blockquote>
<strong>Nota</strong> <br> No debe haber espacios entre el nombre de la matriz y los corchetes, como la <code>array [0]</code> . Aunque JavaScript puede procesar esto correctamente, esto puede confundir a otros programadores que leen su código.
</section>
## Instructions
<section id='instructions'>
Modifique los datos almacenados en el índice <code>0</code> de <code>myArray</code> a un valor de <code>45</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: &#39; <code>myArray</code> ahora debería ser [45,64,99].&#39;
testString: 'assert((function(){if(typeof myArray != "undefined" && myArray[0] == 45 && myArray[1] == 64 && myArray[2] == 99){return true;}else{return false;}})(), "<code>myArray</code> should now be [45,64,99].");'
- text: Debe utilizar el índice correcto para modificar el valor en <code>myArray</code> .
testString: 'assert((function(){if(code.match(/myArray\[0\]\s*=\s*/g)){return true;}else{return false;}})(), "You should be using correct index to modify the value in <code>myArray</code>.");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
// Example
var ourArray = [18,64,99];
ourArray[1] = 45; // ourArray now equals [18,45,99].
// Setup
var myArray = [18,64,99];
// Only change code below this line.
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
var myArray = [18,64,99];
myArray[0] = 45;
```
</section>

View File

@ -0,0 +1,109 @@
---
id: 56533eb9ac21ba0edf2244df
title: Multiple Identical Options in Switch Statements
localeTitle: Múltiples opciones idénticas en declaraciones de cambio
challengeType: 1
---
## Description
<section id='description'>
Si la sentencia de <code>break</code> se omite en el <code>case</code> de una sentencia de <code>switch</code> , se ejecutan las siguientes sentencias de <code>case</code> hasta que se encuentra una <code>break</code> . Si tiene varias entradas con la misma salida, puede representarlas en una declaración de <code>switch</code> como esta:
<blockquote>switch(val) {<br>&nbsp;&nbsp;case 1:<br>&nbsp;&nbsp;case 2:<br>&nbsp;&nbsp;case 3:<br>&nbsp;&nbsp;&nbsp;&nbsp;result = "1, 2, or 3";<br>&nbsp;&nbsp;&nbsp;&nbsp;break;<br>&nbsp;&nbsp;case 4:<br>&nbsp;&nbsp;&nbsp;&nbsp;result = "4 alone";<br>}</blockquote>
casos para 1, 2 y 3 producirán el mismo resultado.
</section>
## Instructions
<section id='instructions'>
Escriba una instrucción de cambio para establecer la <code>answer</code> para los siguientes rangos: <br> <code>1-3</code> - &quot;Bajo&quot; <br> <code>4-6</code> - &quot;Mid&quot; <br> <code>7-9</code> - &quot;Alta&quot;
<strong>Nota</strong> <br> Deberá tener una declaración de <code>case</code> para cada número en el rango.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>sequentialSizes(1)</code> debe devolver &quot;Low&quot;
testString: 'assert(sequentialSizes(1) === "Low", "<code>sequentialSizes(1)</code> should return "Low"");'
- text: <code>sequentialSizes(2)</code> debe devolver &quot;Low&quot;
testString: 'assert(sequentialSizes(2) === "Low", "<code>sequentialSizes(2)</code> should return "Low"");'
- text: <code>sequentialSizes(3)</code> debe devolver &quot;Low&quot;
testString: 'assert(sequentialSizes(3) === "Low", "<code>sequentialSizes(3)</code> should return "Low"");'
- text: <code>sequentialSizes(4)</code> debe devolver &quot;Mid&quot;
testString: 'assert(sequentialSizes(4) === "Mid", "<code>sequentialSizes(4)</code> should return "Mid"");'
- text: <code>sequentialSizes(5)</code> debe devolver &quot;Mid&quot;
testString: 'assert(sequentialSizes(5) === "Mid", "<code>sequentialSizes(5)</code> should return "Mid"");'
- text: <code>sequentialSizes(6)</code> debe devolver &quot;Mid&quot;
testString: 'assert(sequentialSizes(6) === "Mid", "<code>sequentialSizes(6)</code> should return "Mid"");'
- text: <code>sequentialSizes(7)</code> debe devolver &quot;Alto&quot;
testString: 'assert(sequentialSizes(7) === "High", "<code>sequentialSizes(7)</code> should return "High"");'
- text: <code>sequentialSizes(8)</code> debe devolver &quot;Alto&quot;
testString: 'assert(sequentialSizes(8) === "High", "<code>sequentialSizes(8)</code> should return "High"");'
- text: <code>sequentialSizes(9)</code> debe devolver &quot;Alto&quot;
testString: 'assert(sequentialSizes(9) === "High", "<code>sequentialSizes(9)</code> should return "High"");'
- text: No debes usar ninguna declaración <code>if</code> o <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: Usted debe tener nueve declaraciones de <code>case</code>
testString: 'assert(code.match(/case/g).length === 9, "You should have nine <code>case</code> statements");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
function sequentialSizes(val) {
var answer = "";
// Only change code below this line
// Only change code above this line
return answer;
}
// Change this value to test
sequentialSizes(1);
```
</div>
</section>
## Solution
<section id='solution'>
```js
function sequentialSizes(val) {
var answer = "";
switch(val) {
case 1:
case 2:
case 3:
answer = "Low";
break;
case 4:
case 5:
case 6:
answer = "Mid";
break;
case 7:
case 8:
case 9:
answer = "High";
}
return answer;
}
```
</section>

View File

@ -0,0 +1,66 @@
---
id: bd7993c9c69feddfaeb7bdef
title: Multiply Two Decimals with JavaScript
localeTitle: Multiplica dos decimales con JavaScript
challengeType: 1
---
## Description
<section id='description'>
En JavaScript, también puede realizar cálculos con números decimales, al igual que los números enteros.
Multipliquemos dos decimales para obtener su producto.
</section>
## Instructions
<section id='instructions'>
Cambie el <code>0.0</code> para que el producto sea igual a <code>5.0</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: El <code>product</code> variable debe ser igual a <code>5.0</code> .
testString: 'assert(product === 5.0, "The variable <code>product</code> should equal <code>5.0</code>.");'
- text: Debes usar el operador <code>*</code>
testString: 'assert(/\*/.test(code), "You should use the <code>*</code> operator");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
var product = 2.0 * 0.0;
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
var product = 2.0 * 2.5;
```
</section>

View File

@ -0,0 +1,70 @@
---
id: cf1231c1c11feddfaeb5bdef
title: Multiply Two Numbers with JavaScript
localeTitle: Multiplica dos números con JavaScript
challengeType: 1
---
## Description
<section id='description'>
También podemos multiplicar un número por otro.
JavaScript usa el símbolo <code>*</code> para la multiplicación de dos números.
<strong>Ejemplo</strong>
<blockquote>myVar = 13 * 13; // assigned 169</blockquote>
</section>
## Instructions
<section id='instructions'>
Cambia el <code>0</code> para que el producto sea igual a <code>80</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: Hacer que el <code>product</code> variable sea igual a 80.
testString: 'assert(product === 80,"Make the variable <code>product</code> equal 80");'
- text: Usa el operador <code>*</code>
testString: 'assert(/\*/.test(code), "Use the <code>*</code> operator");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
var product = 8 * 0;
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
var product = 8 * 10;
```
</section>

View File

@ -0,0 +1,65 @@
---
id: cf1111c1c11feddfaeb7bdef
title: Nest one Array within Another Array
localeTitle: Anidar una matriz dentro de otra matriz
challengeType: 1
---
## Description
<section id='description'>
También puede anidar matrices dentro de otras matrices, como esta: <code>[[&quot;Bulls&quot;, 23], [&quot;White Sox&quot;, 45]]</code> . Esto también se llama una <dfn>matriz multidimensional <dfn>. <code>0</code></dfn></dfn> </section>
## Instructions
<section id='instructions'>
Crea una matriz anidada llamada <code>myArray</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>myArray</code> debe tener al menos una matriz anidada dentro de otra matriz.
testString: 'assert(Array.isArray(myArray) && myArray.some(Array.isArray), "<code>myArray</code> should have at least one array nested within another array.");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
// Example
var ourArray = [["the universe", 42], ["everything", 101010]];
// Only change code below this line.
var myArray = [];
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
var myArray = [[1,2,3]];
```
</section>

View File

@ -0,0 +1,79 @@
---
id: 56533eb9ac21ba0edf2244e1
title: Nesting For Loops
localeTitle: Anidando para bucles
challengeType: 1
---
## Description
<section id='description'>
Si tiene una matriz multidimensional, puede usar la misma lógica que el punto de ruta anterior para recorrer tanto la matriz como cualquier subarreglo. Aquí hay un ejemplo:
<blockquote>var arr = [<br>&nbsp;&nbsp;[1,2], [3,4], [5,6]<br>];<br>for (var i=0; i &lt; arr.length; i++) {<br>&nbsp;&nbsp;for (var j=0; j &lt; arr[i].length; j++) {<br>&nbsp;&nbsp;&nbsp;&nbsp;console.log(arr[i][j]);<br>&nbsp;&nbsp;}<br>}</blockquote>
Esto genera cada subelemento en <code>arr</code> uno a la vez. Tenga en cuenta que para el bucle interno, estamos comprobando la <code>.length</code> de <code>arr[i]</code> , ya que <code>arr[i]</code> es en sí misma una matriz.
</section>
## Instructions
<section id='instructions'>
Modificar la función <code>multiplyAll</code> para que multiplique la variable del <code>product</code> por cada número en las subarreglas de <code>arr</code>
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: &#39; <code>multiplyAll([[1],[2],[3]])</code> debe devolver <code>6</code> &#39;
testString: 'assert(multiplyAll([[1],[2],[3]]) === 6, "<code>multiplyAll([[1],[2],[3]])</code> should return <code>6</code>");'
- text: &#39; <code>multiplyAll([[1,2],[3,4],[5,6,7]])</code> debe devolver <code>5040</code> &#39;
testString: 'assert(multiplyAll([[1,2],[3,4],[5,6,7]]) === 5040, "<code>multiplyAll([[1,2],[3,4],[5,6,7]])</code> should return <code>5040</code>");'
- text: &#39; <code>multiplyAll([[5,1],[0.2, 4, 0.5],[3, 9]])</code> debe devolver <code>54</code> &#39;
testString: 'assert(multiplyAll([[5,1],[0.2, 4, 0.5],[3, 9]]) === 54, "<code>multiplyAll([[5,1],[0.2, 4, 0.5],[3, 9]])</code> should return <code>54</code>");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
function multiplyAll(arr) {
var product = 1;
// Only change code below this line
// Only change code above this line
return product;
}
// Modify values below to test your code
multiplyAll([[1,2],[3,4],[5,6,7]]);
```
</div>
</section>
## Solution
<section id='solution'>
```js
function multiplyAll(arr) {
var product = 1;
for (var i = 0; i < arr.length; i++) {
for (var j = 0; j < arr[i].length; j++) {
product *= arr[i][j];
}
}
return product;
}
multiplyAll([[1,2],[3,4],[5,6,7]]);
```
</section>

View File

@ -0,0 +1,110 @@
---
id: 56533eb9ac21ba0edf2244bd
title: Passing Values to Functions with Arguments
localeTitle: Pasando valores a funciones con argumentos
challengeType: 1
---
## Description
<section id='description'>
<dfn>parámetros</dfn> son variables que actúan como marcadores de posición para los valores que deben ingresarse en una función cuando se llama. Cuando se define una función, normalmente se define junto con uno o más parámetros. Los valores reales que se ingresan (o <dfn>&quot;pasan&quot;</dfn> ) en una función cuando se llama se conocen como <dfn>argumentos</dfn> .
Aquí hay una función con dos parámetros, <code>param1</code> y <code>param2</code> :
<blockquote>function testFun(param1, param2) {<br>&nbsp;&nbsp;console.log(param1, param2);<br>}</blockquote>
Entonces podemos llamar a <code>testFun</code> :
<code>testFun(&quot;Hello&quot;, &quot;World&quot;);</code>
Hemos pasado dos argumentos, <code>&quot;Hello&quot;</code> y <code>&quot;World&quot;</code> . Dentro de la función, <code>param1</code> será igual a &quot;Hello&quot; y <code>param2</code> será igual a &quot;World&quot;. Tenga en cuenta que podría <code>testFun</code> llamar a <code>testFun</code> con diferentes argumentos y los parámetros tomarían el valor de los nuevos argumentos.
</section>
## Instructions
<section id='instructions'>
<ol> <li> Cree una función llamada <code>functionWithArgs</code> que acepte dos argumentos y envíe su suma a la consola dev. </li><li> Llame a la función con dos números como argumentos. </li></ol>
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>functionWithArgs</code> debería ser una función
testString: 'assert(typeof functionWithArgs === "function", "<code>functionWithArgs</code> should be a function");'
- text: &#39; <code>functionWithArgs(1,2)</code> debe generar <code>3</code> &#39;
testString: 'if(typeof functionWithArgs === "function") { capture(); functionWithArgs(1,2); uncapture(); } assert(logOutput == 3, "<code>functionWithArgs(1,2)</code> should output <code>3</code>");'
- text: &#39; <code>functionWithArgs(7,9)</code> debe generar <code>16</code> &#39;
testString: 'if(typeof functionWithArgs === "function") { capture(); functionWithArgs(7,9); uncapture(); } assert(logOutput == 16, "<code>functionWithArgs(7,9)</code> should output <code>16</code>");'
- text: Llame a <code>functionWithArgs</code> con dos números después de definirlo.
testString: 'assert(/^\s*functionWithArgs\s*\(\s*\d+\s*,\s*\d+\s*\)\s*;/m.test(code), "Call <code>functionWithArgs</code> with two numbers after you define it.");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
// Example
function ourFunctionWithArgs(a, b) {
console.log(a - b);
}
ourFunctionWithArgs(10, 5); // Outputs 5
// Only change code below this line.
```
</div>
### Before Test
<div id='js-setup'>
```js
var logOutput = "";
var originalConsole = console
function capture() {
var nativeLog = console.log;
console.log = function (message) {
if(message) logOutput = JSON.stringify(message).trim();
if(nativeLog.apply) {
nativeLog.apply(originalConsole, arguments);
} else {
var nativeMsg = Array.prototype.slice.apply(arguments).join(' ');
nativeLog(nativeMsg);
}
};
}
function uncapture() {
console.log = originalConsole.log;
}
capture();
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
function functionWithArgs(a, b) {
console.log(a + b);
}
functionWithArgs(10, 5);
```
</section>

View File

@ -0,0 +1,76 @@
---
id: 599a789b454f2bbd91a3ff4d
title: Practice comparing different values
localeTitle: Practicar comparando valores diferentes.
challengeType: 1
---
## Description
<section id='description'>
En los últimos dos desafíos, aprendimos sobre el operador de igualdad ( <code>==</code> ) y el operador de igualdad estricta ( <code>===</code> ). Hagamos una revisión rápida y practiquemos el uso de estos operadores un poco más.
Si los valores que se comparan no son del mismo tipo, el operador de igualdad realizará una conversión de tipo y luego evaluará los valores. Sin embargo, el operador de igualdad estricta comparará tanto el tipo de datos como el valor tal como está, sin convertir un tipo en otro.
<strong>ejemplos</strong>
<blockquote>3 == '3' // returns true because JavaScript performs type conversion from string to number<br>3 === '3' // returns false because the types are different and type conversion is not performed</blockquote>
<strong>Nota</strong> <br> En JavaScript, puede determinar el tipo de una variable o un valor con el operador <code>typeof</code> , de la siguiente manera:
<blockquote>typeof 3 // returns 'number'<br>typeof '3' // returns 'string'</blockquote>
</section>
## Instructions
<section id='instructions'>
La función <code>compareEquality</code> en el editor compara dos valores utilizando el <code>equality operator</code> . Modifique la función de modo que devuelva &quot;Igual&quot; solo cuando los valores sean estrictamente iguales.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: &#39; <code>compareEquality(10, &quot;10&quot;)</code> debe devolver &quot;Not Equal&quot;&#39;
testString: 'assert(compareEquality(10, "10") === "Not Equal", "<code>compareEquality(10, "10")</code> should return "Not Equal"");'
- text: &#39; <code>compareEquality(&quot;20&quot;, 20)</code> debe devolver &quot;Not Equal&quot;&#39;
testString: 'assert(compareEquality("20", 20) === "Not Equal", "<code>compareEquality("20", 20)</code> should return "Not Equal"");'
- text: Debes usar el operador <code>===</code>
testString: 'assert(code.match(/===/g), "You should use the <code>===</code> operator");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
// Setup
function compareEquality(a, b) {
if (a == b) { // Change this line
return "Equal";
}
return "Not Equal";
}
// Change this value to test
compareEquality(10, "10");
```
</div>
</section>
## Solution
<section id='solution'>
```js
function compareEquality(a,b) {
if (a === b) {
return "Equal";
}
return "Not Equal";
}
```
</section>

View File

@ -0,0 +1,143 @@
---
id: 5688e62ea601b2482ff8422b
title: Profile Lookup
localeTitle: Búsqueda de perfiles
challengeType: 1
---
## Description
<section id='description'>
Tenemos una variedad de objetos que representan a diferentes personas en nuestras listas de contactos.
Se ha <code>lookUpProfile</code> función <code>lookUpProfile</code> que toma el <code>name</code> y una propiedad ( <code>prop</code> ) como argumentos.
La función debe comprobar si <code>name</code> es de un contacto real <code>firstName</code> y la propiedad dada ( <code>prop</code> ) es una propiedad de ese contacto.
Si ambos son verdaderos, devuelva el &quot;valor&quot; de esa propiedad.
Si el <code>name</code> no corresponde a ningún contacto, devuelva <code>&quot;No such contact&quot;</code>
Si la <code>prop</code> no corresponde a ninguna propiedad válida de un contacto encontrado para coincidir con el <code>name</code> entonces devuelva <code>&quot;No such property&quot;</code> existe <code>&quot;No such property&quot;</code>
</section>
## Instructions
<section id='instructions'>
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: &#39; <code>&quot;Kristian&quot;, &quot;lastName&quot;</code> debería devolver <code>&quot;Vos&quot;</code> &#39;
testString: 'assert(lookUpProfile("Kristian","lastName") === "Vos", "<code>"Kristian", "lastName"</code> should return <code>"Vos"</code>");'
- text: &#39; <code>&quot;Sherlock&quot;, &quot;likes&quot;</code> debería devolver <code>[&quot;Intriguing Cases&quot;, &quot;Violin&quot;]</code> &#39;
testString: 'assert.deepEqual(lookUpProfile("Sherlock", "likes"), ["Intriguing Cases", "Violin"], "<code>"Sherlock", "likes"</code> should return <code>["Intriguing Cases", "Violin"]</code>");'
- text: &#39; <code>&quot;Harry&quot;,&quot;likes&quot;</code> debería devolver una matriz&#39;
testString: 'assert(typeof lookUpProfile("Harry", "likes") === "object", "<code>"Harry","likes"</code> should return an array");'
- text: &#39; <code>&quot;Bob&quot;, &quot;number&quot;</code> debe devolver &quot;No existe tal contacto&quot;&#39;
testString: 'assert(lookUpProfile("Bob", "number") === "No such contact", "<code>"Bob", "number"</code> should return "No such contact"");'
- text: &#39; <code>&quot;Bob&quot;, &quot;potato&quot;</code> debe devolver &quot;No hay tal contacto&quot;&#39;
testString: 'assert(lookUpProfile("Bob", "potato") === "No such contact", "<code>"Bob", "potato"</code> should return "No such contact"");'
- text: &#39; <code>&quot;Akira&quot;, &quot;address&quot;</code> debe devolver &quot;No existe tal propiedad&quot;
testString: 'assert(lookUpProfile("Akira", "address") === "No such property", "<code>"Akira", "address"</code> should return "No such property"");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
//Setup
var contacts = [
{
"firstName": "Akira",
"lastName": "Laine",
"number": "0543236543",
"likes": ["Pizza", "Coding", "Brownie Points"]
},
{
"firstName": "Harry",
"lastName": "Potter",
"number": "0994372684",
"likes": ["Hogwarts", "Magic", "Hagrid"]
},
{
"firstName": "Sherlock",
"lastName": "Holmes",
"number": "0487345643",
"likes": ["Intriguing Cases", "Violin"]
},
{
"firstName": "Kristian",
"lastName": "Vos",
"number": "unknown",
"likes": ["JavaScript", "Gaming", "Foxes"]
}
];
function lookUpProfile(name, prop){
// Only change code below this line
// Only change code above this line
}
// Change these values to test your function
lookUpProfile("Akira", "likes");
```
</div>
</section>
## Solution
<section id='solution'>
```js
var contacts = [
{
"firstName": "Akira",
"lastName": "Laine",
"number": "0543236543",
"likes": ["Pizza", "Coding", "Brownie Points"]
},
{
"firstName": "Harry",
"lastName": "Potter",
"number": "0994372684",
"likes": ["Hogwarts", "Magic", "Hagrid"]
},
{
"firstName": "Sherlock",
"lastName": "Holmes",
"number": "0487345643",
"likes": ["Intriguing Cases", "Violin"]
},
{
"firstName": "Kristian",
"lastName": "Vos",
"number": "unknown",
"likes": ["JavaScript", "Gaming", "Foxes"]
},
];
//Write your function in between these comments
function lookUpProfile(name, prop){
for(var i in contacts){
if(contacts[i].firstName === name) {
return contacts[i][prop] || "No such property";
}
}
return "No such contact";
}
//Write your function in between these comments
lookUpProfile("Akira", "likes");
```
</section>

View File

@ -0,0 +1,73 @@
---
id: 56533eb9ac21ba0edf2244b4
title: Quoting Strings with Single Quotes
localeTitle: Cotizando cuerdas con comillas simples
challengeType: 1
---
## Description
<section id='description'>
<dfn>Los</dfn> valores de <dfn>cadena</dfn> en JavaScript se pueden escribir con comillas simples o dobles, siempre y cuando comience y termine con el mismo tipo de comillas. A diferencia de otros lenguajes de programación, las comillas simples y dobles funcionan de la misma manera en JavaScript.
<blockquote>doubleQuoteStr = "This is a string"; <br/>singleQuoteStr = 'This is also a string';</blockquote>
La razón por la que podría querer usar un tipo de cita sobre la otra es si quiere usar ambos en una cadena. Esto puede suceder si desea guardar una conversación en una cadena y tener la conversación entre comillas. Otro uso sería guardar una etiqueta <code>&lt;a&gt;</code> con varios atributos entre comillas, todo dentro de una cadena.
<blockquote>conversation = 'Finn exclaims to Jake, "Algebraic!"';</blockquote>
Sin embargo, esto se convierte en un problema si necesita usar las citas más externas dentro de él. Recuerde, una cadena tiene el mismo tipo de cita al principio y al final. Pero si tiene la misma cita en algún punto intermedio, la cadena se detendrá antes y arrojará un error.
<blockquote>goodStr = 'Jake asks Finn, "Hey, let\'s go on an adventure?"'; <br/>badStr = 'Finn responds, "Let's go!"'; // Throws an error</blockquote>
En el <dfn>goodStr</dfn> anterior, puede usar ambas comillas de forma segura usando la barra invertida <code>\</code> como un carácter de escape.
<strong>Nota</strong> <br/> La barra invertida <code>\</code> no debe confundirse con la barra inclinada <code>/</code> . No hacen lo mismo.
</section>
## Instructions
<section id='instructions'>
Cambie la cadena proporcionada por una cadena con comillas simples al principio y al final y sin caracteres de escape.
En este momento, la etiqueta <code>&lt;a&gt;</code> en la cadena usa comillas dobles en todas partes. Deberá cambiar las comillas externas a comillas simples para poder eliminar los caracteres de escape.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: Eliminar todas las <code>backslashes</code> ( <code>\</code> )
testString: 'assert(!/\\/g.test(code) && myStr.match("\\s*<a href\\s*=\\s*"http://www.example.com"\\s*target\\s*=\\s*"_blank">\\s*Link\\s*</a>\\s*"), "Remove all the <code>backslashes</code> (<code>\</code>)");'
- text: &#39;Debería tener dos comillas simples <code>&#39;</code> y cuatro comillas dobles <code>&quot;</code> &#39;
testString: 'assert(code.match(/"/g).length === 4 && code.match(/"/g).length === 2, "You should have two single quotes <code>&#39;</code> and four double quotes <code>&quot;</code>");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
var myStr = "<a href=\"http://www.example.com\" target=\"_blank\">Link</a>";
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
var myStr = '<a href="http://www.example.com" target="_blank">Link</a>';
```
</section>

View File

@ -0,0 +1,160 @@
---
id: 56533eb9ac21ba0edf2244cf
title: Record Collection
localeTitle: Colección de discos
challengeType: 1
---
## Description
<section id='description'>
Se le asigna un objeto JSON que representa una parte de su colección de álbumes musicales. Cada álbum tiene varias propiedades y un número de identificación único como clave. No todos los álbumes tienen información completa.
Escriba una función que tome la <code>id</code> un álbum (como <code>2548</code> ), una propiedad <code>prop</code> (como <code>&quot;artist&quot;</code> o <code>&quot;tracks&quot;</code> ), y un <code>value</code> (como <code>&quot;Addicted to Love&quot;</code> ) para modificar los datos de esta colección.
Si la <code>prop</code> no es <code>&quot;tracks&quot;</code> y el <code>value</code> no está vacío ( <code>&quot;&quot;</code> ), actualice o establezca el <code>value</code> para la propiedad del álbum de grabación.
Su función debe devolver siempre el objeto de colección completo.
Existen varias reglas para manejar datos incompletos:
Si <code>prop</code> es <code>&quot;tracks&quot;</code> pero el álbum no tiene una propiedad de <code>&quot;tracks&quot;</code> , cree una matriz vacía antes de agregar el nuevo valor a la propiedad correspondiente del álbum.
Si <code>prop</code> es <code>&quot;tracks&quot;</code> y el <code>value</code> no está vacío ( <code>&quot;&quot;</code> ), presione el <code>value</code> sobre el final de la matriz de <code>tracks</code> existente del <code>tracks</code> .
Si el <code>value</code> está vacío ( <code>&quot;&quot;</code> ), elimine la propiedad de <code>prop</code> determinada del álbum.
<strong>Consejos</strong> <br> Utilice la <code>bracket notation</code> cuando <a href="javascript-algorithms-and-data-structures/basic-javascript/accessing-object-properties-with-variables" target="_blank">acceda a las propiedades de objetos con variables</a> .
Push es un método de matriz que puede leer sobre <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push" target="_blank">Mozilla Developer Network</a> .
Puede volver a consultar <a href="javascript-algorithms-and-data-structures/basic-javascript/manipulating-complex-objects" target="_blank">Manipular objetos complejos</a> Presentando la notación de objetos de JavaScript (JSON) para obtener una actualización.
</section>
## Instructions
<section id='instructions'>
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: &#39;Después de <code>updateRecords(5439, &quot;artist&quot;, &quot;ABBA&quot;)</code> , el <code>artist</code> debe ser <code>&quot;ABBA&quot;</code> &#39;
testString: 'collection = collectionCopy; assert(updateRecords(5439, "artist", "ABBA")[5439]["artist"] === "ABBA", "After <code>updateRecords(5439, "artist", "ABBA")</code>, <code>artist</code> should be <code>"ABBA"</code>");'
- text: &#39;Después de <code>updateRecords(5439, &quot;tracks&quot;, &quot;Take a Chance on Me&quot;)</code> , los <code>tracks</code> deberían tener <code>&quot;Take a Chance on Me&quot;</code> como el último elemento.&#39;
testString: 'assert(updateRecords(5439, "tracks", "Take a Chance on Me")[5439]["tracks"].pop() === "Take a Chance on Me", "After <code>updateRecords(5439, "tracks", "Take a Chance on Me")</code>, <code>tracks</code> should have <code>"Take a Chance on Me"</code> as the last element.");'
- text: &#39;Después de <code>updateRecords(2548, &quot;artist&quot;, &quot;&quot;)</code> , el <code>artist</code> no debe configurarse&#39;
testString: 'updateRecords(2548, "artist", ""); assert(!collection[2548].hasOwnProperty("artist"), "After <code>updateRecords(2548, "artist", "")</code>, <code>artist</code> should not be set");'
- text: &#39;Después de <code>updateRecords(1245, &quot;tracks&quot;, &quot;Addicted to Love&quot;)</code> , las <code>tracks</code> deberían tener <code>&quot;Addicted to Love&quot;</code> como último elemento.&#39;
testString: 'assert(updateRecords(1245, "tracks", "Addicted to Love")[1245]["tracks"].pop() === "Addicted to Love", "After <code>updateRecords(1245, "tracks", "Addicted to Love")</code>, <code>tracks</code> should have <code>"Addicted to Love"</code> as the last element.");'
- text: &#39;Después de <code>updateRecords(2468, &quot;tracks&quot;, &quot;Free&quot;)</code> , los <code>tracks</code> deberían tener <code>&quot;1999&quot;</code> como primer elemento.&#39;
testString: 'assert(updateRecords(2468, "tracks", "Free")[2468]["tracks"][0] === "1999", "After <code>updateRecords(2468, "tracks", "Free")</code>, <code>tracks</code> should have <code>"1999"</code> as the first element.");'
- text: &#39;Después de <code>updateRecords(2548, &quot;tracks&quot;, &quot;&quot;)</code> , no se deben establecer <code>tracks</code> &#39;
testString: 'updateRecords(2548, "tracks", ""); assert(!collection[2548].hasOwnProperty("tracks"), "After <code>updateRecords(2548, "tracks", "")</code>, <code>tracks</code> should not be set");'
- text: &#39;Después de <code>updateRecords(1245, &quot;album&quot;, &quot;Riptide&quot;)</code> , el <code>album</code> debería ser <code>&quot;Riptide&quot;</code> &#39;
testString: 'assert(updateRecords(1245, "album", "Riptide")[1245]["album"] === "Riptide", "After <code>updateRecords(1245, "album", "Riptide")</code>, <code>album</code> should be <code>"Riptide"</code>");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
// Setup
var collection = {
"2548": {
"album": "Slippery When Wet",
"artist": "Bon Jovi",
"tracks": [
"Let It Rock",
"You Give Love a Bad Name"
]
},
"2468": {
"album": "1999",
"artist": "Prince",
"tracks": [
"1999",
"Little Red Corvette"
]
},
"1245": {
"artist": "Robert Palmer",
"tracks": [ ]
},
"5439": {
"album": "ABBA Gold"
}
};
// Keep a copy of the collection for tests
var collectionCopy = JSON.parse(JSON.stringify(collection));
// Only change code below this line
function updateRecords(id, prop, value) {
return collection;
}
// Alter values below to test your code
updateRecords(5439, "artist", "ABBA");
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
var collection = {
2548: {
album: "Slippery When Wet",
artist: "Bon Jovi",
tracks: [
"Let It Rock",
"You Give Love a Bad Name"
]
},
2468: {
album: "1999",
artist: "Prince",
tracks: [
"1999",
"Little Red Corvette"
]
},
1245: {
artist: "Robert Palmer",
tracks: [ ]
},
5439: {
album: "ABBA Gold"
}
};
// Keep a copy of the collection for tests
var collectionCopy = JSON.parse(JSON.stringify(collection));
// Only change code below this line
function updateRecords(id, prop, value) {
if(value === "") delete collection[id][prop];
else if(prop === "tracks") {
collection[id][prop] = collection[id][prop] || [];
collection[id][prop].push(value);
} else {
collection[id][prop] = value;
}
return collection;
}
```
</section>

View File

@ -0,0 +1,116 @@
---
id: 56533eb9ac21ba0edf2244e0
title: Replacing If Else Chains with Switch
localeTitle: Reemplazo de cadenas de otro tipo con interruptor
challengeType: 1
---
## Description
<section id='description'>
Si tiene muchas opciones para elegir, una instrucción <code>switch</code> puede ser más fácil de escribir que muchas instrucciones encadenadas <code>if</code> / <code>else if</code> . Lo siguiente:
<blockquote>if (val === 1) {<br>&nbsp;&nbsp;answer = "a";<br>} else if (val === 2) {<br>&nbsp;&nbsp;answer = "b";<br>} else {<br>&nbsp;&nbsp;answer = "c";<br>}</blockquote>
puede ser reemplazado por:
<blockquote>switch(val) {<br>&nbsp;&nbsp;case 1:<br>&nbsp;&nbsp;&nbsp;&nbsp;answer = "a";<br>&nbsp;&nbsp;&nbsp;&nbsp;break;<br>&nbsp;&nbsp;case 2:<br>&nbsp;&nbsp;&nbsp;&nbsp;answer = "b";<br>&nbsp;&nbsp;&nbsp;&nbsp;break;<br>&nbsp;&nbsp;default:<br>&nbsp;&nbsp;&nbsp;&nbsp;answer = "c";<br>}</blockquote>
</section>
## Instructions
<section id='instructions'>
Cambie las sentencias <code>if</code> / <code>else if</code> encadenadas en una sentencia <code>switch</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: No debe utilizar ninguna <code>else</code> declaración en ningún lugar del editor.
testString: 'assert(!/else/g.test(code), "You should not use any <code>else</code> statements anywhere in the editor");'
- text: No debe utilizar ninguna sentencia <code>if</code> en ningún lugar del editor.
testString: 'assert(!/if/g.test(code), "You should not use any <code>if</code> statements anywhere in the editor");'
- text: Debe tener al menos cuatro declaraciones de <code>break</code>
testString: 'assert(code.match(/break/g).length >= 4, "You should have at least four <code>break</code> statements");'
- text: <code>chainToSwitch(&quot;bob&quot;)</code> debe ser &quot;Marley&quot;
testString: 'assert(chainToSwitch("bob") === "Marley", "<code>chainToSwitch("bob")</code> should be "Marley"");'
- text: <code>chainToSwitch(42)</code> debe ser &quot;La Respuesta&quot;
testString: 'assert(chainToSwitch(42) === "The Answer", "<code>chainToSwitch(42)</code> should be "The Answer"");'
- text: &#39; <code>chainToSwitch(1)</code> debe ser &quot;No hay # 1&quot;&#39;
testString: 'assert(chainToSwitch(1) === "There is no #1", "<code>chainToSwitch(1)</code> should be "There is no #1"");'
- text: <code>chainToSwitch(99)</code> debería ser &quot;¡Me <code>chainToSwitch(99)</code> por esto!&quot;
testString: 'assert(chainToSwitch(99) === "Missed me by this much!", "<code>chainToSwitch(99)</code> should be "Missed me by this much!"");'
- text: <code>chainToSwitch(7)</code> debe ser &quot;Ate Nine&quot;
testString: 'assert(chainToSwitch(7) === "Ate Nine", "<code>chainToSwitch(7)</code> should be "Ate Nine"");'
- text: <code>chainToSwitch(&quot;John&quot;)</code> debe ser &quot;&quot; (cadena vacía)
testString: 'assert(chainToSwitch("John") === "", "<code>chainToSwitch("John")</code> should be "" (empty string)");'
- text: <code>chainToSwitch(156)</code> debe ser &quot;&quot; (cadena vacía)
testString: 'assert(chainToSwitch(156) === "", "<code>chainToSwitch(156)</code> should be "" (empty string)");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
function chainToSwitch(val) {
var answer = "";
// Only change code below this line
if (val === "bob") {
answer = "Marley";
} else if (val === 42) {
answer = "The Answer";
} else if (val === 1) {
answer = "There is no #1";
} else if (val === 99) {
answer = "Missed me by this much!";
} else if (val === 7) {
answer = "Ate Nine";
}
// Only change code above this line
return answer;
}
// Change this value to test
chainToSwitch(7);
```
</div>
</section>
## Solution
<section id='solution'>
```js
function chainToSwitch(val) {
var answer = "";
switch(val) {
case "bob":
answer = "Marley";
break;
case 42:
answer = "The Answer";
break;
case 1:
answer = "There is no #1";
break;
case 99:
answer = "Missed me by this much!";
break;
case 7:
answer = "Ate Nine";
}
return answer;
}
```
</section>

View File

@ -0,0 +1,74 @@
---
id: 56533eb9ac21ba0edf2244c2
title: Return a Value from a Function with Return
localeTitle: Devolver un valor de una función con retorno
challengeType: 1
---
## Description
<section id='description'>
Podemos pasar valores a una función con <dfn>argumentos</dfn> . Puede usar una declaración de <code>return</code> para enviar un valor de vuelta de una función.
<strong>Ejemplo</strong>
<blockquote>function plusThree(num) {<br>&nbsp;&nbsp;return num + 3;<br>}<br>var answer = plusThree(5); // 8</blockquote>
<code>plusThree</code> toma un <dfn>argumento</dfn> para <code>num</code> y devuelve un valor igual a <code>num + 3</code> .
</section>
## Instructions
<section id='instructions'>
Cree una función <code>timesFive</code> que acepte un argumento, lo multiplique por <code>5</code> y devuelva el nuevo valor. Vea la última línea en el editor para ver un ejemplo de cómo puede probar su función <code>timesFive</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>timesFive</code> debería ser una función
testString: 'assert(typeof timesFive === "function", "<code>timesFive</code> should be a function");'
- text: <code>timesFive(5)</code> debe devolver <code>25</code>
testString: 'assert(timesFive(5) === 25, "<code>timesFive(5)</code> should return <code>25</code>");'
- text: <code>timesFive(2)</code> debe devolver <code>10</code>
testString: 'assert(timesFive(2) === 10, "<code>timesFive(2)</code> should return <code>10</code>");'
- text: <code>timesFive(0)</code> debe devolver <code>0</code>
testString: 'assert(timesFive(0) === 0, "<code>timesFive(0)</code> should return <code>0</code>");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
// Example
function minusSeven(num) {
return num - 7;
}
// Only change code below this line
console.log(minusSeven(10));
```
</div>
</section>
## Solution
<section id='solution'>
```js
function timesFive(num) {
return num * 5;
}
timesFive(10);
```
</section>

View File

@ -0,0 +1,84 @@
---
id: 56533eb9ac21ba0edf2244c4
title: Return Early Pattern for Functions
localeTitle: Volver el patrón inicial para funciones
challengeType: 1
---
## Description
<section id='description'>
Cuando se alcanza una declaración de <code>return</code> , la ejecución de la función actual se detiene y el control vuelve a la ubicación de la llamada.
<strong>Ejemplo</strong>
<blockquote>function myFun() {<br>&nbsp;&nbsp;console.log("Hello");<br>&nbsp;&nbsp;return "World";<br>&nbsp;&nbsp;console.log("byebye")<br>}<br>myFun();</blockquote>
Lo anterior muestra &quot;Hola&quot; a la consola, devuelve &quot;Mundo&quot;, pero <code>&quot;byebye&quot;</code> nunca se <code>&quot;byebye&quot;</code> , porque la función sale de la instrucción de <code>return</code> .
</section>
## Instructions
<section id='instructions'>
Modifique la función <code>abTest</code> para que si <code>a</code> o <code>b</code> sean menores que <code>0</code> la función saldrá inmediatamente con un valor <code>undefined</code> .
<strong>Pista</strong> <br> Recuerde que <a href='http://www.freecodecamp.org/challenges/understanding-uninitialized-variables' target='_blank'><code>undefined</code> es una palabra clave</a> , no una cadena.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: &#39; <code>abTest(2,2)</code> debe devolver un número&#39;
testString: 'assert(typeof abTest(2,2) === "number" , "<code>abTest(2,2)</code> should return a number");'
- text: &#39; <code>abTest(2,2)</code> debe devolver <code>8</code> &#39;
testString: 'assert(abTest(2,2) === 8 , "<code>abTest(2,2)</code> should return <code>8</code>");'
- text: &#39; <code>abTest(-2,2)</code> debe devolver <code>undefined</code> &#39;
testString: 'assert(abTest(-2,2) === undefined , "<code>abTest(-2,2)</code> should return <code>undefined</code>");'
- text: &#39; <code>abTest(2,-2)</code> debe devolver <code>undefined</code> &#39;
testString: 'assert(abTest(2,-2) === undefined , "<code>abTest(2,-2)</code> should return <code>undefined</code>");'
- text: &#39; <code>abTest(2,8)</code> debe devolver <code>18</code> &#39;
testString: 'assert(abTest(2,8) === 18 , "<code>abTest(2,8)</code> should return <code>18</code>");'
- text: &#39; <code>abTest(3,3)</code> debe devolver <code>12</code> &#39;
testString: 'assert(abTest(3,3) === 12 , "<code>abTest(3,3)</code> should return <code>12</code>");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
// Setup
function abTest(a, b) {
// Only change code below this line
// Only change code above this line
return Math.round(Math.pow(Math.sqrt(a) + Math.sqrt(b), 2));
}
// Change values below to test your code
abTest(2,2);
```
</div>
</section>
## Solution
<section id='solution'>
```js
function abTest(a, b) {
if(a < 0 || b < 0) {
return undefined;
}
return Math.round(Math.pow(Math.sqrt(a) + Math.sqrt(b), 2));
}
```
</section>

View File

@ -0,0 +1,73 @@
---
id: 5679ceb97cbaa8c51670a16b
title: Returning Boolean Values from Functions
localeTitle: Devolviendo valores booleanos desde funciones
challengeType: 1
---
## Description
<section id='description'>
Puede recordar de la <a href="waypoint-comparison-with-the-equality-operator" target="_blank">comparación con el operador de igualdad</a> que todos los operadores de comparación devuelven un valor booleano <code>true</code> o <code>false</code> .
Algunas veces las personas usan una sentencia if / else para hacer una comparación, como esta:
<blockquote>function isEqual(a,b) {<br>&nbsp;&nbsp;if (a === b) {<br>&nbsp;&nbsp;&nbsp;&nbsp;return true;<br>&nbsp;&nbsp;} else {<br>&nbsp;&nbsp;&nbsp;&nbsp;return false;<br>&nbsp;&nbsp;}<br>}</blockquote>
Pero hay una mejor manera de hacer esto. Como <code>===</code> devuelve <code>true</code> o <code>false</code> , podemos devolver el resultado de la comparación:
<blockquote>function isEqual(a,b) {<br>&nbsp;&nbsp;return a === b;<br>}</blockquote>
</section>
## Instructions
<section id='instructions'>
Arreglar la función <code>isLess</code> permite eliminar las sentencias <code>if/else</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: &#39; <code>isLess(10,15)</code> debe devolver <code>true</code> &#39;
testString: 'assert(isLess(10,15) === true, "<code>isLess(10,15)</code> should return <code>true</code>");'
- text: &#39; <code>isLess(15,10)</code> debe devolver <code>false</code> &#39;
testString: 'assert(isLess(15, 10) === false, "<code>isLess(15,10)</code> should return <code>false</code>");'
- text: No debes usar ninguna declaración <code>if</code> o <code>else</code>
testString: 'assert(!/if|else/g.test(code), "You should not use any <code>if</code> or <code>else</code> statements");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
function isLess(a, b) {
// Fix this code
if (a < b) {
return true;
} else {
return false;
}
}
// Change these values to test
isLess(10, 15);
```
</div>
</section>
## Solution
<section id='solution'>
```js
function isLess(a, b) {
return a < b;
}
```
</section>

View File

@ -0,0 +1,96 @@
---
id: 56533eb9ac21ba0edf2244dd
title: Selecting from Many Options with Switch Statements
localeTitle: Selección de muchas opciones con instrucciones de cambio
challengeType: 1
---
## Description
<section id='description'>
Si tiene muchas opciones para elegir, use una instrucción de <code>switch</code> . Una instrucción de <code>switch</code> prueba un valor y puede tener muchas declaraciones de <code>case</code> que definen varios valores posibles. Las declaraciones se ejecutan desde el primer valor de <code>case</code> coincidente hasta que se encuentra una <code>break</code> .
Aquí hay un ejemplo de <dfn>pseudocódigo</dfn> :
<blockquote>switch(num) {<br>&nbsp;&nbsp;case value1:<br>&nbsp;&nbsp;&nbsp;&nbsp;statement1;<br>&nbsp;&nbsp;&nbsp;&nbsp;break;<br>&nbsp;&nbsp;case value2:<br>&nbsp;&nbsp;&nbsp;&nbsp;statement2;<br>&nbsp;&nbsp;&nbsp;&nbsp;break;<br>...<br>&nbsp;&nbsp;case valueN:<br>&nbsp;&nbsp;&nbsp;&nbsp;statementN;<br>&nbsp;&nbsp;&nbsp;&nbsp;break;<br>}</blockquote>
valores de
<code>case</code> se prueban con igualdad estricta ( <code>===</code> ). La <code>break</code> le dice a JavaScript que deje de ejecutar sentencias. Si se omite la <code>break</code> , se ejecutará la siguiente instrucción.
</section>
## Instructions
<section id='instructions'>
Escriba una instrucción de conmutación que pruebe <code>val</code> y establezca la <code>answer</code> para las siguientes condiciones: <br> <code>1</code> - &quot;alfa&quot; <br> <code>2</code> - &quot;beta&quot; <br> <code>3</code> - &quot;gamma&quot; <br> <code>4</code> - &quot;delta&quot;
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>caseInSwitch(1)</code> debe tener un valor de &quot;alfa&quot;
testString: 'assert(caseInSwitch(1) === "alpha", "<code>caseInSwitch(1)</code> should have a value of "alpha"");'
- text: <code>caseInSwitch(2)</code> debe tener un valor de &quot;beta&quot;
testString: 'assert(caseInSwitch(2) === "beta", "<code>caseInSwitch(2)</code> should have a value of "beta"");'
- text: <code>caseInSwitch(3)</code> debe tener un valor de &quot;gamma&quot;
testString: 'assert(caseInSwitch(3) === "gamma", "<code>caseInSwitch(3)</code> should have a value of "gamma"");'
- text: <code>caseInSwitch(4)</code> debe tener un valor de &quot;delta&quot;
testString: 'assert(caseInSwitch(4) === "delta", "<code>caseInSwitch(4)</code> should have a value of "delta"");'
- text: No debes usar ninguna declaración <code>if</code> o <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: Debe tener al menos 3 declaraciones de <code>break</code>
testString: 'assert(code.match(/break/g).length > 2, "You should have at least 3 <code>break</code> statements");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
function caseInSwitch(val) {
var answer = "";
// Only change code below this line
// Only change code above this line
return answer;
}
// Change this value to test
caseInSwitch(1);
```
</div>
</section>
## Solution
<section id='solution'>
```js
function caseInSwitch(val) {
var answer = "";
switch(val) {
case 1:
answer = "alpha";
break;
case 2:
answer = "beta";
break;
case 3:
answer = "gamma";
break;
case 4:
answer = "delta";
}
return answer;
}
```
</section>

View File

@ -0,0 +1,78 @@
---
id: 56533eb9ac21ba0edf2244bc
title: Shopping List
localeTitle: Lista de la compra
challengeType: 1
---
## Description
<section id='description'>
Crea una lista de compras en la variable <code>myList</code> . La lista debe ser una matriz multidimensional que contenga varias subarreglas.
El primer elemento de cada sub-matriz debe contener una cadena con el nombre del elemento. El segundo elemento debe ser un número que represente la cantidad, es decir,
<code>[&quot;Chocolate Bar&quot;, 15]</code>
Debe haber al menos 5 subarreglos en la lista.
</section>
## Instructions
<section id='instructions'>
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>myList</code> debería ser una matriz
testString: 'assert(isArray, "<code>myList</code> should be an array");'
- text: Los primeros elementos de cada uno de sus subarreglos deben ser cadenas
testString: 'assert(hasString, "The first elements in each of your sub-arrays must all be strings");'
- text: Los segundos elementos en cada una de sus sub-matrices deben ser todos números
testString: 'assert(hasNumber, "The second elements in each of your sub-arrays must all be numbers");'
- text: Debes tener al menos 5 elementos en tu lista
testString: 'assert(count > 4, "You must have at least 5 items in your list");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
var myList = [];
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
var myList = [
["Candy", 10],
["Potatoes", 12],
["Eggs", 12],
["Catfood", 1],
["Toads", 9]
];
```
</section>

View File

@ -0,0 +1,116 @@
---
id: 56533eb9ac21ba0edf2244c6
title: Stand in Line
localeTitle: Hacer cola
challengeType: 1
---
## Description
<section id='description'>
En informática, una <dfn>cola</dfn> es una <dfn>estructura de datos</dfn> abstracta donde los elementos se mantienen en orden. Los nuevos elementos se pueden agregar al final de la <code>queue</code> y los elementos antiguos se quitan de la parte delantera de la <code>queue</code> .
Escriba una función <code>nextInLine</code> que tome una matriz ( <code>arr</code> ) y un número ( <code>item</code> ) como argumentos.
Agregue el número al final de la matriz, luego elimine el primer elemento de la matriz.
La función <code>nextInLine</code> debe devolver el elemento que se eliminó.
</section>
## Instructions
<section id='instructions'>
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: &#39; <code>nextInLine([], 5)</code> debe devolver un número&#39;.
testString: 'assert.isNumber(nextInLine([],5), "<code>nextInLine([], 5)</code> should return a number.");'
- text: &#39; <code>nextInLine([], 1)</code> debe devolver <code>1</code> &#39;
testString: 'assert(nextInLine([],1) === 1, "<code>nextInLine([], 1)</code> should return <code>1</code>");'
- text: &#39; <code>nextInLine([2], 1)</code> debe devolver <code>2</code> &#39;
testString: 'assert(nextInLine([2],1) === 2, "<code>nextInLine([2], 1)</code> should return <code>2</code>");'
- text: &#39; <code>nextInLine([5,6,7,8,9], 1)</code> debe devolver <code>5</code> &#39;
testString: 'assert(nextInLine([5,6,7,8,9],1) === 5, "<code>nextInLine([5,6,7,8,9], 1)</code> should return <code>5</code>");'
- text: &#39;Después de <code>nextInLine(testArr, 10)</code> , <code>testArr[4]</code> debería ser <code>10</code> &#39;
testString: 'nextInLine(testArr, 10); assert(testArr[4] === 10, "After <code>nextInLine(testArr, 10)</code>, <code>testArr[4]</code> should be <code>10</code>");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
function nextInLine(arr, item) {
// Your code here
return item; // Change this line
}
// Test Setup
var testArr = [1,2,3,4,5];
// Display Code
console.log("Before: " + JSON.stringify(testArr));
console.log(nextInLine(testArr, 6)); // Modify this line to test
console.log("After: " + JSON.stringify(testArr));
```
</div>
### Before Test
<div id='js-setup'>
```js
var logOutput = [];
var originalConsole = console
function capture() {
var nativeLog = console.log;
console.log = function (message) {
logOutput.push(message);
if(nativeLog.apply) {
nativeLog.apply(originalConsole, arguments);
} else {
var nativeMsg = Array.prototype.slice.apply(arguments).join(' ');
nativeLog(nativeMsg);
}
};
}
function uncapture() {
console.log = originalConsole.log;
}
capture();
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
var testArr = [ 1,2,3,4,5];
function nextInLine(arr, item) {
arr.push(item);
return arr.shift();
}
```
</section>

View File

@ -0,0 +1,73 @@
---
id: bd7993c9c69feddfaeb8bdef
title: Store Multiple Values in one Variable using JavaScript Arrays
localeTitle: Almacene múltiples valores en una variable utilizando matrices de JavaScript
challengeType: 1
---
## Description
<section id='description'>
Con las variables de <code>array</code> JavaScript, podemos almacenar varios datos en un solo lugar.
Inicia una declaración de matriz con un corchete de apertura, finalícelo con un corchete de cierre y ponga una coma entre cada entrada, como esto:
<code>var sandwich = [&quot;peanut butter&quot;, &quot;jelly&quot;, &quot;bread&quot;]</code> .
</section>
## Instructions
<section id='instructions'>
Modifique la nueva matriz <code>myArray</code> para que contenga tanto una <code>string</code> como un <code>number</code> (en ese orden).
<strong>Pista</strong> <br> Consulte el código de ejemplo en el editor de texto si se atasca.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>myArray</code> debería ser una <code>array</code> .
testString: 'assert(typeof myArray == "object", "<code>myArray</code> should be an <code>array</code>.");'
- text: El primer elemento en <code>myArray</code> debe ser una <code>string</code> .
testString: 'assert(typeof myArray[0] !== "undefined" && typeof myArray[0] == "string", "The first item in <code>myArray</code> should be a <code>string</code>.");'
- text: El segundo elemento en <code>myArray</code> debe ser un <code>number</code> .
testString: 'assert(typeof myArray[1] !== "undefined" && typeof myArray[1] == "number", "The second item in <code>myArray</code> should be a <code>number</code>.");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
// Example
var ourArray = ["John", 23];
// Only change code below this line.
var myArray = [];
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
var myArray = ["The Answer", 42];
```
</section>

View File

@ -0,0 +1,94 @@
---
id: 56533eb9ac21ba0edf2244a8
title: Storing Values with the Assignment Operator
localeTitle: Almacenamiento de valores con el operador de asignación
challengeType: 1
---
## Description
<section id='description'>
En JavaScript, puede almacenar un valor en una variable con el operador de <dfn>asignación</dfn> .
<code>myVariable = 5;</code>
Esto asigna el valor <code>Number</code> <code>5</code> a <code>myVariable</code> .
asignación siempre va de derecha a izquierda. Todo a la derecha del operador <code>=</code> se resuelve antes de que el valor se asigne a la variable a la izquierda del operador.
<blockquote>myVar = 5;<br>myNum = myVar;</blockquote>
Esto asigna <code>5</code> a <code>myVar</code> y luego resuelve <code>myVar</code> a <code>5</code> nuevamente y lo asigna a <code>myNum</code> .
</section>
## Instructions
<section id='instructions'>
Asignar el valor <code>7</code> a la variable <code>a</code> .
Asigna los contenidos de <code>a</code> a la variable <code>b</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: No cambie el código por encima de la línea
testString: 'assert(/var a;/.test(code) && /var b = 2;/.test(code), "Do not change code above the line");'
- text: <code class = "notranslate"> a </code> debe tener un valor de 7
testString: 'assert(typeof a === "number" && a === 7, "<code>a</code> should have a value of 7");'
- text: <code class = "notranslate"> b </code> debe tener un valor de 7
testString: 'assert(typeof b === "number" && b === 7, "<code>b</code> should have a value of 7");'
- text: <code class = "notranslate"> a </code> debe asignarse a <code class = "notranslate"> b </code> con <code class = "notranslate"> = </code>
testString: 'assert(/b\s*=\s*a\s*;/g.test(code), "<code>a</code> should be assigned to <code>b</code> with <code>=</code>");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
// Setup
var a;
var b = 2;
// Only change code below this line
```
</div>
### Before Test
<div id='js-setup'>
```js
if (typeof a != 'undefined') {
a = undefined;
}
if (typeof b != 'undefined') {
b = undefined;
}
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
var a;
var b = 2;
a = 7;
b = a;
```
</section>

View File

@ -0,0 +1,70 @@
---
id: cf1111c1c11feddfaeb4bdef
title: Subtract One Number from Another with JavaScript
localeTitle: Resta un número de otro con JavaScript
challengeType: 1
---
## Description
<section id='description'>
También podemos restar un número de otro.
JavaScript usa el símbolo <code>-</code> para restar.
<strong>Ejemplo</strong>
<blockquote>myVar = 12 - 6; // assigned 6</blockquote>
</section>
## Instructions
<section id='instructions'>
Cambia el <code>0</code> por lo que la diferencia es <code>12</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: Haz la <code>difference</code> variable igual a 12.
testString: 'assert(difference === 12, "Make the variable <code>difference</code> equal 12.");'
- text: Sólo restar un número de 45.
testString: 'assert(/var\s*difference\s*=\s*45\s*-\s*[0-9]*;(?!\s*[a-zA-Z0-9]+)/.test(code),"Only subtract one number from 45.");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
var difference = 45 - 0;
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
var difference = 45 - 33;
```
</section>

View File

@ -0,0 +1,84 @@
---
id: 567af2437cbaa8c51670a16c
title: Testing Objects for Properties
localeTitle: Prueba de objetos para propiedades
challengeType: 1
---
## Description
<section id='description'>
A veces es útil verificar si la propiedad de un objeto dado existe o no. Podemos usar el método de objetos <code>.hasOwnProperty(propname)</code> para determinar si ese objeto tiene el nombre de propiedad dado. <code>.hasOwnProperty()</code> devuelve <code>true</code> o <code>false</code> si se encuentra la propiedad o no.
<strong>Ejemplo</strong>
<blockquote>var myObj = {<br>&nbsp;&nbsp;top: "hat",<br>&nbsp;&nbsp;bottom: "pants"<br>};<br>myObj.hasOwnProperty("top"); // true<br>myObj.hasOwnProperty("middle"); // false</blockquote>
</section>
## Instructions
<section id='instructions'>
Modifique la función <code>checkObj</code> para probar <code>myObj</code> para <code>checkProp</code> . Si se encuentra la propiedad, devuelva el valor de esa propiedad. Si no, devuelve <code>&quot;Not Found&quot;</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>checkObj(&quot;gift&quot;)</code> debe devolver <code>&quot;pony&quot;</code> .
testString: 'assert(checkObj("gift") === "pony", "<code>checkObj("gift")</code> should return <code>"pony"</code>.");'
- text: <code>checkObj(&quot;pet&quot;)</code> debe devolver <code>&quot;kitten&quot;</code> .
testString: 'assert(checkObj("pet") === "kitten", "<code>checkObj("pet")</code> should return <code>"kitten"</code>.");'
- text: <code>checkObj(&quot;house&quot;)</code> debe devolver <code>&quot;Not Found&quot;</code> .
testString: 'assert(checkObj("house") === "Not Found", "<code>checkObj("house")</code> should return <code>"Not Found"</code>.");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
// Setup
var myObj = {
gift: "pony",
pet: "kitten",
bed: "sleigh"
};
function checkObj(checkProp) {
// Your Code Here
return "Change Me!";
}
// Test your code by modifying these values
checkObj("gift");
```
</div>
</section>
## Solution
<section id='solution'>
```js
var myObj = {
gift: "pony",
pet: "kitten",
bed: "sleigh"
};
function checkObj(checkProp) {
if(myObj.hasOwnProperty(checkProp)) {
return myObj[checkProp];
} else {
return "Not Found";
}
}
```
</section>

View File

@ -0,0 +1,75 @@
---
id: 56533eb9ac21ba0edf2244ba
title: Understand String Immutability
localeTitle: Entender la inmutabilidad de la cuerda
challengeType: 1
---
## Description
<section id='description'>
En JavaScript, los valores de <code>String</code> son <dfn>inmutables</dfn> , lo que significa que no se pueden modificar una vez creados.
Por ejemplo, el siguiente código:
<blockquote>var myStr = "Bob";<br>myStr[0] = "J";</blockquote>
no puede cambiar el valor de <code>myStr</code> a &quot;Trabajo&quot;, porque el contenido de <code>myStr</code> no se puede modificar. Tenga en cuenta que esto <em>no</em> significa que <code>myStr</code> no se pueda cambiar, solo que los caracteres individuales de un <dfn>literal de cadena</dfn> no se pueden cambiar. La única forma de cambiar <code>myStr</code> sería asignarlo con una nueva cadena, como esta:
<blockquote>var myStr = "Bob";<br>myStr = "Job";</blockquote>
</section>
## Instructions
<section id='instructions'>
Corrija la asignación a <code>myStr</code> para que contenga el valor de cadena de <code>Hello World</code> usando el enfoque que se muestra en el ejemplo anterior.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>myStr</code> debería tener un valor de <code>Hello World</code>
testString: 'assert(myStr === "Hello World", "<code>myStr</code> should have a value of <code>Hello World</code>");'
- text: No cambie el código por encima de la línea
testString: 'assert(/myStr = "Jello World"/.test(code), "Do not change the code above the line");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
// Setup
var myStr = "Jello World";
// Only change code below this line
myStr[0] = "H"; // Fix Me
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
var myStr = "Jello World";
myStr = "Hello World";
```
</section>

View File

@ -0,0 +1,73 @@
---
id: bd7123c9c441eddfaeb5bdef
title: Understanding Boolean Values
localeTitle: Entendiendo los valores booleanos
challengeType: 1
---
## Description
<section id='description'>
Otro tipo de datos es el <dfn>booleano</dfn> . <code>Booleans</code> solo pueden ser uno de dos valores: <code>true</code> o <code>false</code> . Básicamente son pequeños interruptores de encendido y apagado, donde <code>true</code> está &quot;encendido&quot; y <code>false</code> está &quot;apagado&quot;. Estos dos estados son mutuamente excluyentes.
<strong>Nota</strong> <br> <code>Boolean</code> valores <code>Boolean</code> nunca se escriben entre comillas. Las <code>strings</code> <code>&quot;true&quot;</code> y <code>&quot;false&quot;</code> no son <code>Boolean</code> y no tienen un significado especial en JavaScript.
</section>
## Instructions
<section id='instructions'>
Modifique la función <code>welcomeToBooleans</code> para que devuelva <code>true</code> lugar de <code>false</code> cuando se haga clic en el botón Ejecutar.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: &#39;La función <code>welcomeToBooleans()</code> debería devolver un valor booleano (verdadero / falso).&#39;
testString: 'assert(typeof welcomeToBooleans() === "boolean", "The <code>welcomeToBooleans()</code> function should return a boolean &#40;true/false&#41; value.");'
- text: <code>welcomeToBooleans()</code> debe devolver true.
testString: 'assert(welcomeToBooleans() === true, "<code>welcomeToBooleans()</code> should return true.");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
function welcomeToBooleans() {
// Only change code below this line.
return false; // Change this line
// Only change code above this line.
}
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
function welcomeToBooleans() {
return true; // Change this line
}
```
</section>

View File

@ -0,0 +1,82 @@
---
id: 56533eb9ac21ba0edf2244ab
title: Understanding Case Sensitivity in Variables
localeTitle: Entender la sensibilidad de los casos en variables
challengeType: 1
---
## Description
<section id='description'>
En JavaScript, todas las variables y nombres de funciones distinguen entre mayúsculas y minúsculas. Esto significa que la capitalización importa.
<code>MYVAR</code> no es lo mismo que <code>MyVar</code> ni <code>myvar</code> . Es posible tener múltiples variables distintas con el mismo nombre pero con una carcasa diferente. Se recomienda encarecidamente que, para mayor claridad, <em>no</em> utilice esta función de idioma.
<h4> Mejores prácticas </h4>
Escribe nombres de variables en JavaScript en <dfn>camelCase</dfn> . En <dfn>camelCase</dfn> , los nombres de variables de varias palabras tienen la primera palabra en minúsculas y la primera letra de cada palabra subsiguiente se escribe con mayúscula.
<strong>Ejemplos:</strong>
<blockquote>var someVariable;<br>var anotherVariableName;<br>var thisVariableNameIsSoLong;</blockquote>
</section>
## Instructions
<section id='instructions'>
Modifique las declaraciones y asignaciones existentes para que sus nombres utilicen <dfn>camelCase</dfn> . <br> No cree nuevas variables.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>studlyCapVar</code> está definido y tiene un valor de <code>10</code>
testString: 'assert(typeof studlyCapVar !== "undefined" && studlyCapVar === 10, "<code>studlyCapVar</code> is defined and has a value of <code>10</code>");'
- text: <code>properCamelCase</code> está definido y tiene un valor de <code>&quot;A String&quot;</code>
testString: 'assert(typeof properCamelCase !== "undefined" && properCamelCase === "A String", "<code>properCamelCase</code> is defined and has a value of <code>"A String"</code>");'
- text: <code>titleCaseOver</code> está definido y tiene un valor de <code>9000</code>
testString: 'assert(typeof titleCaseOver !== "undefined" && titleCaseOver === 9000, "<code>titleCaseOver</code> is defined and has a value of <code>9000</code>");'
- text: <code>studlyCapVar</code> debe usar camelCase en las secciones de declaración y asignación.
testString: 'assert(code.match(/studlyCapVar/g).length === 2, "<code>studlyCapVar</code> should use camelCase in both declaration and assignment sections.");'
- text: <code>properCamelCase</code> debe usar camelCase en las secciones de declaración y asignación.
testString: 'assert(code.match(/properCamelCase/g).length === 2, "<code>properCamelCase</code> should use camelCase in both declaration and assignment sections.");'
- text: <code>titleCaseOver</code> debe usar camelCase en las secciones de declaración y asignación.
testString: 'assert(code.match(/titleCaseOver/g).length === 2, "<code>titleCaseOver</code> should use camelCase in both declaration and assignment sections.");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
// Declarations
var StUdLyCapVaR;
var properCamelCase;
var TitleCaseOver;
// Assignments
STUDLYCAPVAR = 10;
PRoperCAmelCAse = "A String";
tITLEcASEoVER = 9000;
```
</div>
</section>
## Solution
<section id='solution'>
```js
var studlyCapVar;
var properCamelCase;
var titleCaseOver;
studlyCapVar = 10;
properCamelCase = "A String";
titleCaseOver = 9000;
```
</section>

View File

@ -0,0 +1,83 @@
---
id: 598e8944f009e646fc236146
title: Understanding Undefined Value returned from a Function
localeTitle: Entendiendo el valor indefinido devuelto por una función
challengeType: 1
---
## Description
<section id='description'>
Una función puede incluir la declaración de <code>return</code> , pero no tiene que hacerlo. En el caso de que la función no tenga una declaración de <code>return</code> , cuando la llame, la función procesa el código interno pero el valor devuelto <code>undefined</code> está <code>undefined</code> .
<strong>Ejemplo</strong>
<blockquote>var sum = 0;<br>function addSum(num) {<br>&nbsp;&nbsp;sum = sum + num;<br>}<br>var returnedValue = addSum(3); // sum will be modified but returned value is undefined</blockquote>
<code>addSum</code> es una función sin una declaración de <code>return</code> . La función cambiará la variable de <code>sum</code> global, pero el valor devuelto de la función es <code>undefined</code>
</section>
## Instructions
<section id='instructions'>
Crear una función <code>addFive</code> sin ningún argumento. Esta función agrega 5 a la variable de <code>sum</code> , pero su valor devuelto <code>undefined</code> está <code>undefined</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>addFive</code> debería ser una función
testString: 'assert(typeof addFive === "function", "<code>addFive</code> should be a function");'
- text: <code>sum</code> debe ser igual a 8
testString: 'assert(sum === 8, "<code>sum</code> should be equal to 8");'
- text: El valor devuelto de <code>addFive</code> debe estar <code>undefined</code>
testString: 'assert(addFive() === undefined, "Returned value from <code>addFive</code> should be <code>undefined</code>");'
- text: &#39;Dentro de tus funciones, suma 5 a la variable de <code>sum</code> &#39;
testString: 'assert(code.match(/(sum\s*\=\s*sum\s*\+\s*5)|(sum\s*\+\=\s*5)/g).length === 1, "Inside of your functions, add 5 to the <code>sum</code> variable");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
// Example
var sum = 0;
function addThree() {
sum = sum + 3;
}
// Only change code below this line
// Only change code above this line
var returnedValue = addFive();
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
function addFive() {
sum = sum + 5;
}
```
</section>

View File

@ -0,0 +1,82 @@
---
id: 56533eb9ac21ba0edf2244aa
title: Understanding Uninitialized Variables
localeTitle: Entendiendo las variables sin inicializar
challengeType: 1
---
## Description
<section id='description'>
Cuando se declaran las variables de JavaScript, tienen un valor inicial de <code>undefined</code> . Si realiza una operación matemática en una variable <code>undefined</code> , su resultado será <code>NaN</code> que significa <dfn>&quot;No es un número&quot;</dfn> . Si concatena una cadena con una variable <code>undefined</code> , obtendrá una <dfn>cadena</dfn> literal de <code>&quot;undefined&quot;</code> .
</section>
## Instructions
<section id='instructions'>
Inicialice las tres variables <code>a</code> , <code>b</code> y <code>c</code> con <code>5</code> , <code>10</code> y <code>&quot;I am a&quot;</code> respectivamente para que no queden <code>undefined</code> .
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>a</code> debe definirse y evaluarse para tener el valor de <code>6</code>
testString: 'assert(typeof a === "number" && a === 6, "<code>a</code> should be defined and evaluated to have the value of <code>6</code>");'
- text: <code>b</code> debe definirse y evaluarse para que tenga el valor de <code>15</code>
testString: 'assert(typeof b === "number" && b === 15, "<code>b</code> should be defined and evaluated to have the value of <code>15</code>");'
- text: <code>c</code> no debe contener <code>undefined</code> y debe tener el valor &quot;I am a String!&quot;
testString: 'assert(!/undefined/.test(c) && c === "I am a String!", "<code>c</code> should not contain <code>undefined</code> and should have a value of "I am a String!"");'
- text: No cambie el código debajo de la línea
testString: 'assert(/a = a \+ 1;/.test(code) && /b = b \+ 5;/.test(code) && /c = c \+ " String!";/.test(code), "Do not change code below the line");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
// Initialize these three variables
var a;
var b;
var c;
// Do not change code below this line
a = a + 1;
b = b + 5;
c = c + " String!";
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
var a = 5;
var b = 10;
var c = "I am a";
a = a + 1;
b = b + 5;
c = c + " String!";
```
</section>

View File

@ -0,0 +1,95 @@
---
id: 56bbb991ad1ed5201cd392d1
title: Updating Object Properties
localeTitle: Actualización de las propiedades del objeto
challengeType: 1
---
## Description
<section id='description'>
Después de haber creado un objeto de JavaScript, puede actualizar sus propiedades en cualquier momento, como si fuera a actualizar cualquier otra variable. Puede utilizar la notación de puntos o corchetes para actualizar.
Por ejemplo, echemos un vistazo a <code>ourDog</code> :
<blockquote>var ourDog = {<br>&nbsp;&nbsp;"name": "Camper",<br>&nbsp;&nbsp;"legs": 4,<br>&nbsp;&nbsp;"tails": 1,<br>&nbsp;&nbsp;"friends": ["everything!"]<br>};</blockquote>
Ya que es un perro particularmente feliz, cambiemos su nombre a &quot;Happy Camper&quot;. Así es como actualizamos la propiedad del nombre de su objeto:
<code>ourDog.name = &quot;Happy Camper&quot;;</code> o
<code>ourDog[&quot;name&quot;] = &quot;Happy Camper&quot;;</code>
Ahora, cuando evaluamos <code>ourDog.name</code> , en lugar de obtener &quot;Camper&quot;, obtendremos su nuevo nombre, &quot;Happy Camper&quot;.
</section>
## Instructions
<section id='instructions'>
Actualizar la <code>myDog</code> del nombre del objeto <code>myDog</code> . Cambiemos su nombre de &quot;Codificador&quot; a &quot;Codificador feliz&quot;. Puede utilizar la notación de puntos o corchetes.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: Actualice la <code>myDog</code> <code>&quot;name&quot;</code> <code>myDog</code> para que sea igual a &quot;Happy Coder&quot;.
testString: 'assert(/happy coder/gi.test(myDog.name), "Update <code>myDog</code>&apos;s <code>"name"</code> property to equal "Happy Coder".");'
- text: No edite la definición de <code>myDog</code>
testString: 'assert(/"name": "Coder"/.test(code), "Do not edit the <code>myDog</code> definition");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
// Example
var ourDog = {
"name": "Camper",
"legs": 4,
"tails": 1,
"friends": ["everything!"]
};
ourDog.name = "Happy Camper";
// Setup
var myDog = {
"name": "Coder",
"legs": 4,
"tails": 1,
"friends": ["freeCodeCamp Campers"]
};
// Only change code below this line.
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
var myDog = {
"name": "Coder",
"legs": 4,
"tails": 1,
"friends": ["freeCodeCamp Campers"]
};
myDog.name = "Happy Coder";
```
</section>

View File

@ -0,0 +1,83 @@
---
id: bd7123c9c549eddfaeb5bdef
title: Use Bracket Notation to Find the First Character in a String
localeTitle: Usa la notación de corchete para encontrar el primer personaje en una cadena
challengeType: 1
---
## Description
<section id='description'>
<code>Bracket notation</code> es una forma de obtener un carácter en un <code>index</code> específico dentro de una cadena.
La mayoría de los lenguajes de programación modernos, como JavaScript, no comienzan a contar en 1 como hacen los humanos. Comienzan en 0. Esto se conoce como indexación <dfn>basada en cero</dfn> .
Por ejemplo, el carácter en el índice 0 en la palabra &quot;Charles&quot; es &quot;C&quot;. Entonces, si <code>var firstName = &quot;Charles&quot;</code> , puede obtener el valor de la primera letra de la cadena usando <code>firstName[0]</code> .
</section>
## Instructions
<section id='instructions'>
Use la <dfn>notación de corchetes</dfn> para encontrar el primer carácter en la variable <code>lastName</code> y asignarlo a <code>firstLetterOfLastName</code> .
<strong>Pista</strong> <br> Intenta mirar la declaración de la variable <code>firstLetterOfFirstName</code> si te quedas atascado.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: La variable <code>firstLetterOfLastName</code> debe tener el valor de <code>L</code>
testString: 'assert(firstLetterOfLastName === "L", "The <code>firstLetterOfLastName</code> variable should have the value of <code>L</code>.");'
- text: Usted debe utilizar la notación de soporte.
testString: 'assert(code.match(/firstLetterOfLastName\s*?=\s*?lastName\[.*?\]/), "You should use bracket notation.");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
// Example
var firstLetterOfFirstName = "";
var firstName = "Ada";
firstLetterOfFirstName = firstName[0];
// Setup
var firstLetterOfLastName = "";
var lastName = "Lovelace";
// Only change code below this line
firstLetterOfLastName = lastName;
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
var firstLetterOfLastName = "";
var lastName = "Lovelace";
// Only change code below this line
firstLetterOfLastName = lastName[0];
```
</section>

View File

@ -0,0 +1,79 @@
---
id: bd7123c9c451eddfaeb5bdef
title: Use Bracket Notation to Find the Last Character in a String
localeTitle: Use la notación de corchete para encontrar el último carácter en una cadena
challengeType: 1
---
## Description
<section id='description'>
Para obtener la última letra de una cadena, puedes restar una de la longitud de la cadena.
Por ejemplo, si <code>var firstName = &quot;Charles&quot;</code> , puede obtener el valor de la última letra de la cadena usando <code>firstName[firstName.length - 1]</code> .
</section>
## Instructions
<section id='instructions'>
Use la <dfn>notación de corchetes</dfn> para encontrar el último carácter en la variable <code>lastName</code> .
<strong>Pista</strong> <br> Intenta mirar la declaración de la variable <code>lastLetterOfFirstName</code> si te quedas atascado.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>lastLetterOfLastName</code> debe ser &quot;e&quot;.
testString: 'assert(lastLetterOfLastName === "e", "<code>lastLetterOfLastName</code> should be "e".");'
- text: Tienes que usar <code>.length</code> para obtener la última letra.
testString: 'assert(code.match(/\.length/g).length === 2, "You have to use <code>.length</code> to get the last letter.");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
// Example
var firstName = "Ada";
var lastLetterOfFirstName = firstName[firstName.length - 1];
// Setup
var lastName = "Lovelace";
// Only change code below this line.
var lastLetterOfLastName = lastName;
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
var firstName = "Ada";
var lastLetterOfFirstName = firstName[firstName.length - 1];
var lastName = "Lovelace";
var lastLetterOfLastName = lastName[lastName.length - 1];
```
</section>

View File

@ -0,0 +1,76 @@
---
id: bd7123c9c450eddfaeb5bdef
title: Use Bracket Notation to Find the Nth Character in a String
localeTitle: Usa la notación de corchete para encontrar el enésimo carácter de una cadena
challengeType: 1
---
## Description
<section id='description'>
También puede usar la <dfn>notación de corchetes</dfn> para obtener el carácter en otras posiciones dentro de una cadena.
Recuerde que las computadoras comienzan a contar en <code>0</code> , por lo que el primer carácter es en realidad el carácter cero.
</section>
## Instructions
<section id='instructions'>
Intentemos establecer <code>thirdLetterOfLastName</code> para que sea igual a la tercera letra de la variable <code>lastName</code> usando notación de corchete.
<strong>Pista</strong> <br> Intenta mirar la declaración de la variable <code>secondLetterOfFirstName</code> si te quedas atascado.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: La variable <code>thirdLetterOfLastName</code> debe tener el valor de <code>v</code> .
testString: 'assert(thirdLetterOfLastName === "v", "The <code>thirdLetterOfLastName</code> variable should have the value of <code>v</code>.");'
- text: Usted debe utilizar la notación de soporte.
testString: 'assert(code.match(/thirdLetterOfLastName\s*?=\s*?lastName\[.*?\]/), "You should use bracket notation.");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
// Example
var firstName = "Ada";
var secondLetterOfFirstName = firstName[1];
// Setup
var lastName = "Lovelace";
// Only change code below this line.
var thirdLetterOfLastName = lastName;
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
var lastName = "Lovelace";
var thirdLetterOfLastName = lastName[2];
```
</section>

View File

@ -0,0 +1,79 @@
---
id: bd7123c9c452eddfaeb5bdef
title: Use Bracket Notation to Find the Nth-to-Last Character in a String
localeTitle: Use la notación de corchete para encontrar el carácter Nth-to-Last en una cadena
challengeType: 1
---
## Description
<section id='description'>
Puede usar el mismo principio que acabamos de usar para recuperar el último carácter de una cadena para recuperar el enésimo al último carácter.
Por ejemplo, puede obtener el valor de la tercera a la última letra de la cadena <code>var firstName = &quot;Charles&quot;</code> usando <code>firstName[firstName.length - 3]</code>
</section>
## Instructions
<section id='instructions'>
Use la <dfn>notación de corchetes</dfn> para encontrar el segundo hasta el último carácter en la cadena <code>lastName</code> .
<strong>Pista</strong> <br> Intenta mirar la declaración de la variable <code>thirdToLastLetterOfFirstName</code> si te quedas atascado.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>secondToLastLetterOfLastName</code> debe ser &quot;c&quot;.
testString: 'assert(secondToLastLetterOfLastName === "c", "<code>secondToLastLetterOfLastName</code> should be "c".");'
- text: Tienes que usar <code>.length</code> para obtener la segunda última letra.
testString: 'assert(code.match(/\.length/g).length === 2, "You have to use <code>.length</code> to get the second last letter.");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
// Example
var firstName = "Ada";
var thirdToLastLetterOfFirstName = firstName[firstName.length - 3];
// Setup
var lastName = "Lovelace";
// Only change code below this line
var secondToLastLetterOfLastName = lastName;
```
</div>
### After Test
<div id='js-teardown'>
```js
console.info('after the test');
```
</div>
</section>
## Solution
<section id='solution'>
```js
var firstName = "Ada";
var thirdToLastLetterOfFirstName = firstName[firstName.length - 3];
var lastName = "Lovelace";
var secondToLastLetterOfLastName = lastName[lastName.length - 2];
```
</section>

View File

@ -0,0 +1,92 @@
---
id: cf1111c1c12feddfaeb3bdef
title: Use Conditional Logic with If Statements
localeTitle: Usa lógica condicional con sentencias if
challengeType: 1
---
## Description
<section id='description'>
<code>If</code> se usan sentencias para tomar decisiones en código. La palabra clave <code>if</code> le dice a JavaScript que ejecute el código entre llaves en ciertas condiciones, definidas entre paréntesis. Estas condiciones se conocen como condiciones <code>Boolean</code> y solo pueden ser <code>true</code> o <code>false</code> .
Cuando la condición se evalúa como <code>true</code> , el programa ejecuta la instrucción dentro de las llaves. Cuando la condición booleana se evalúa como <code>false</code> , la instrucción dentro de las llaves no se ejecutará.
<strong>pseudocódigo</strong>
<blockquote>if ( <i>condition is true</i> ) {<br>&nbsp;&nbsp; <i>statement is executed</i> <br>}</blockquote>
<strong>Ejemplo</strong>
<blockquote>function test (myCondition) {<br>&nbsp;&nbsp;if (myCondition) {<br>&nbsp;&nbsp;&nbsp;&nbsp; return "It was true";<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;return "It was false";<br>}<br>test(true); // returns "It was true"<br>test(false); // returns "It was false"</blockquote>
Cuando se llama a la <code>test</code> con un valor <code>true</code> , la sentencia <code>if</code> evalúa <code>myCondition</code> para ver si es <code>true</code> o no. Dado que es <code>true</code> , la función devuelve <code>&quot;It was true&quot;</code> . Cuando llamamos a <code>test</code> con un valor de <code>false</code> , <code>myCondition</code> <em>no</em> es <code>true</code> y la instrucción entre llaves no se ejecuta y la función devuelve <code>&quot;It was false&quot;</code> .
</section>
## Instructions
<section id='instructions'>
Cree una instrucción <code>if</code> dentro de la función para devolver <code>&quot;Yes, that was true&quot;</code> si el parámetro <code>wasThatTrue</code> es <code>true</code> y devuelva <code>&quot;No, that was false&quot;</code> contrario.
</section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>trueOrFalse</code> debe ser una función
testString: 'assert(typeof trueOrFalse === "function", "<code>trueOrFalse</code> should be a function");'
- text: <code>trueOrFalse(true)</code> debe devolver una cadena
testString: 'assert(typeof trueOrFalse(true) === "string", "<code>trueOrFalse(true)</code> should return a string");'
- text: <code>trueOrFalse(false)</code> debe devolver una cadena
testString: 'assert(typeof trueOrFalse(false) === "string", "<code>trueOrFalse(false)</code> should return a string");'
- text: &#39; <code>trueOrFalse(true)</code> debe devolver &quot;Sí, eso fue cierto&quot;&#39;
testString: 'assert(trueOrFalse(true) === "Yes, that was true", "<code>trueOrFalse(true)</code> should return "Yes, that was true"");'
- text: &#39; <code>trueOrFalse(false)</code> debe devolver &quot;No, eso fue falso&quot;&#39;
testString: 'assert(trueOrFalse(false) === "No, that was false", "<code>trueOrFalse(false)</code> should return "No, that was false"");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
// Example
function ourTrueOrFalse(isItTrue) {
if (isItTrue) {
return "Yes, it's true";
}
return "No, it's false";
}
// Setup
function trueOrFalse(wasThatTrue) {
// Only change code below this line.
// Only change code above this line.
}
// Change this value to test
trueOrFalse(true);
```
</div>
</section>
## Solution
<section id='solution'>
```js
function trueOrFalse(wasThatTrue) {
if (wasThatTrue) {
return "Yes, that was true";
}
return "No, that was false";
}
```
</section>

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