Skip to content
Merged
Show file tree
Hide file tree
Changes from 25 commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
042d43f
Arrays
joaquinelio Jul 19, 2020
5314f8f
Update 1-js/05-data-types/04-array/10-maximal-subarray/solution.md
joaquinelio Jul 21, 2020
b3a0cc0
Update 1-js/05-data-types/04-array/10-maximal-subarray/solution.md
joaquinelio Jul 21, 2020
af2e2a0
Update 1-js/05-data-types/04-array/10-maximal-subarray/solution.md
joaquinelio Jul 21, 2020
a373976
Update 1-js/05-data-types/04-array/5-array-input-sum/task.md
joaquinelio Jul 21, 2020
baa16d7
Update 1-js/05-data-types/04-array/article.md
joaquinelio Jul 21, 2020
71793c9
Update 1-js/05-data-types/04-array/article.md
joaquinelio Jul 21, 2020
1a517fd
Update 1-js/05-data-types/04-array/article.md
joaquinelio Jul 21, 2020
a73a204
Update 1-js/05-data-types/04-array/article.md
joaquinelio Jul 21, 2020
e88e22a
Update 1-js/05-data-types/04-array/article.md
joaquinelio Jul 21, 2020
fef7302
Update 1-js/05-data-types/04-array/5-array-input-sum/task.md
joaquinelio Jul 21, 2020
93aedf5
Update 1-js/05-data-types/04-array/2-create-array/task.md
joaquinelio Jul 21, 2020
cc3750c
Update 1-js/05-data-types/04-array/3-call-array-this/solution.md
joaquinelio Jul 21, 2020
c2f4f67
Update 1-js/05-data-types/04-array/3-call-array-this/task.md
joaquinelio Jul 21, 2020
05a0618
Update 1-js/05-data-types/04-array/article.md
joaquinelio Jul 21, 2020
383249d
Update 1-js/05-data-types/04-array/5-array-input-sum/solution.md
joaquinelio Jul 21, 2020
f122d1e
Update 1-js/05-data-types/04-array/article.md
joaquinelio Jul 21, 2020
8fdb93a
Update 1-js/05-data-types/04-array/article.md
joaquinelio Jul 21, 2020
726df56
Update 1-js/05-data-types/04-array/article.md
joaquinelio Jul 21, 2020
b3e4585
Update 1-js/05-data-types/04-array/article.md
joaquinelio Jul 21, 2020
2f951b1
Update 1-js/05-data-types/04-array/article.md
joaquinelio Jul 21, 2020
785ff52
Update 1-js/05-data-types/04-array/article.md
joaquinelio Jul 21, 2020
fe7c1bf
Update 1-js/05-data-types/04-array/article.md
joaquinelio Jul 21, 2020
214685f
Update 1-js/05-data-types/04-array/article.md
joaquinelio Jul 21, 2020
db4e7fb
Update 1-js/05-data-types/04-array/article.md
joaquinelio Jul 21, 2020
778666a
Update article.md
joaquinelio Jul 21, 2020
bcb2dc4
Update 1-js/05-data-types/04-array/article.md
joaquinelio Jul 22, 2020
6a6b3f8
Update 1-js/05-data-types/04-array/10-maximal-subarray/solution.md
joaquinelio Jul 22, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions 1-js/05-data-types/04-array/10-maximal-subarray/solution.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

Podemos calcular todas las subsumas.

La más simple forma es tomar cada elemento y calcular las sumas de todos los subarrays que comienzan con él.
La forma más simple es tomar cada elemento y calcular las sumas de todos los subarrays que comienzan con él.

Por ejemplo, para `[-1, 2, 3, -9, 11]`:

Expand Down Expand Up @@ -57,7 +57,7 @@ alert( getMaxSubSum([1, 2, 3]) ); // 6
alert( getMaxSubSum([100, -9, 2, -3, 5]) ); // 100
```

La solución tiene una complejidad 2 en notación Landau (coste respecto al tiempo) [O(n<sup>2</sup>)](https://es.wikipedia.org/wiki/Notaci%C3%B3n_de_Landau). Es decir, si multiplicamos el tamaño del array por 2, el tiempo del algoritmo se multiplicará por 4.
La solución tiene una complejidad 2 en notación Landau [O(n<sup>2</sup>)](https://es.wikipedia.org/wiki/Notaci%C3%B3n_de_Landau) (coste respecto al tiempo). Es decir, si multiplicamos el tamaño del array por 2, el tiempo del algoritmo se multiplicará por 4.

Para arrays muy grandes (1000, 10000 o más items) tales algoritmos llevarán a una severa lentitud.

Expand All @@ -72,7 +72,7 @@ function getMaxSubSum(arr) {
let maxSum = 0;
let partialSum = 0;

for (let item of arr) { // para cada item de arr
for (let item of arr) { // por cada item de arr
partialSum += item; // se lo suma a partialSum
maxSum = Math.max(maxSum, partialSum); // registra el máximo
if (partialSum < 0) partialSum = 0; // cero si se vuelve negativo
Expand Down
3 changes: 1 addition & 2 deletions 1-js/05-data-types/04-array/2-create-array/task.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ Tratemos 5 operaciones de array.

1. Crear un array `styles` con los items "Jazz" y "Blues".
2. Agregar "Rock-n-Roll" al final.
3. Reemplazar el valor en el medio por "Classics". Tu código para encontrar el valor medio debe funcionar con cualquier array de largo impar.
3. Reemplazar el valor en el medio por "Classics". Tu código para encontrar el valor medio debe funcionar con cualquier array de longitud impar.
4. Quitar el primer valor del array y mostrarlo.
5. Anteponer `Rap` y `Reggae` al array.

Expand All @@ -21,4 +21,3 @@ Jazz, Classics, Rock-n-Roll
Classics, Rock-n-Roll
Rap, Reggae, Classics, Rock-n-Roll
```

2 changes: 1 addition & 1 deletion 1-js/05-data-types/04-array/3-call-array-this/solution.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
El llamado a `arr[2]()` es sintácticamente el buen y viejo `obj[method]()`, el el rol de `obj` tenemos `arr`, y en el rol de `method` tenemos `2`.
El llamado a `arr[2]()` es sintácticamente el buen y viejo `obj[method]()`, en el rol de `obj` tenemos `arr`, y en el rol de `method` tenemos `2`.

Entonces tenemos una llamada a función `arr[2]` como un método de objeto. Naturalmente, recibe `this` referenciando el objeto `arr` y su salida es el array:

Expand Down
3 changes: 1 addition & 2 deletions 1-js/05-data-types/04-array/3-call-array-this/task.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ importance: 5

# LLamados en un contexto de array

¿Cuál es el resultado?¿Por qué?
¿Cuál es el resultado y por qué?

```js
let arr = ["a", "b"];
Expand All @@ -15,4 +15,3 @@ arr.push(function() {

arr[2](); // ?
```

3 changes: 1 addition & 2 deletions 1-js/05-data-types/04-array/5-array-input-sum/solution.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ function sumInput() {

while (true) {

let value = prompt("¿Un número por favor?", 0);
let value = prompt("Un número, por favor...", 0);

// ¿Debemos cancelar?
if (value === "" || value === null || !isFinite(value)) break;
Expand All @@ -25,4 +25,3 @@ function sumInput() {

alert( sumInput() );
```

4 changes: 2 additions & 2 deletions 1-js/05-data-types/04-array/5-array-input-sum/task.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@ importance: 4
Escribe una función `sumInput()` que:

- Pida al usuario valores usando `prompt` y los almacene en el array.
- Termine de pedirlos cuando el usuario entre un valor no numérico, una cadena vacía, o presione "Escape".
- Termine de pedirlos cuando el usuario ingrese un valor no numérico, una cadena vacía, o presione "Escape".
- Calcule y devuelva la suma de los items del array.

P.D. Un cero `0` es un número válido, por favor no detenga los ingresos con el cero.
P.D. Un cero `0` es un número válido, por favor no detengas los ingresos con el cero.

[demo]
40 changes: 20 additions & 20 deletions 1-js/05-data-types/04-array/article.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ Casi siempre se usa la segunda. Podemos suministrar elementos iniciales entre lo
let fruits = ["Apple", "Orange", "Plum"];
```

Los elementoss del array están numerados, comenzando desde cero.
Los elementos del array están numerados comenzando desde cero.

Podemos obtener un elemento por su número entre corchetes:

Expand All @@ -47,7 +47,7 @@ fruits[2] = 'Pear'; // ahora ["Apple", "Orange", "Pear"]
fruits[3] = 'Lemon'; // ahora ["Apple", "Orange", "Pear", "Lemon"]
```

La cuenta total de elementos en el array es su largo `length`:
La cuenta total de elementos en el array es su longitud `length`:

```js run
let fruits = ["Apple", "Orange", "Plum"];
Expand Down Expand Up @@ -121,7 +121,7 @@ Una pila es usualmente mostrada como un mazo de cartas, donde las nuevas cartas

Para las pilas, la última introducida es la primera en ser recibida, en inglés esto es llamado principio LIFO (Last-In-First-Out, última en entrar primera en salir). Para las colas, tenemos FIFO (First-In-First-Out primera en entrar, primera en salir).

Los arrays en JavaScript pueden trabajar como colas o pilas. Ellos permiten agregar o quitar elementos a y desde el principio o a y desde el final.
Los arrays en JavaScript pueden trabajar como colas o pilas. Ellos permiten agregar/quitar elementos al/del principio o al/del final.

En ciencias de la computación la estructura de datos que permite esto se denomina cola de doble extremo o [bicola](https://es.wikipedia.org/wiki/Bicola).

Expand All @@ -133,7 +133,7 @@ En ciencias de la computación la estructura de datos que permite esto se denomi
```js run
let fruits = ["Apple", "Orange", "Pear"];

alert( fruits.pop() ); // quita "Pear" y lo muestra
alert( fruits.pop() ); // quita "Pear" y lo muestra en un alert

alert( fruits ); // Apple, Orange
```
Expand All @@ -159,7 +159,7 @@ En ciencias de la computación la estructura de datos que permite esto se denomi
```js run
let fruits = ["Apple", "Orange", "Pear"];

alert( fruits.shift() ); // quita Apple y lo muestra
alert( fruits.shift() ); // quita Apple y lo muestra en una alerta
Comment thread
joaquinelio marked this conversation as resolved.
Outdated

alert( fruits ); // Orange, Pear
```
Expand Down Expand Up @@ -187,11 +187,11 @@ fruits.unshift("Pineapple", "Lemon");
alert( fruits );
```

## Internamente
## Interiores

Un array es una clase especial de objeto. Los corchetes usados para acceder a una propiedad `arr[0]` vienen de la sintaxi de objeto. Son esencialmente lo mismo que `obj[key]`, donde `arr` es el objeto mientras los números son usados como claves.
Un array es una clase especial de objeto. Los corchetes usados para acceder a una propiedad `arr[0]` vienen de la sintaxis de objeto. Son esencialmente lo mismo que `obj[key]`, donde `arr` es el objeto mientras los números son usados como claves.

Ellos extienden los objetos proveyendo métodos especiales para trabajar con colecciones ordenadas de datos y también la propiedad `length`. Pero el corazón es aún un objeto.
Ellos extienden los objetos proveyendo métodos especiales para trabajar con colecciones ordenadas de datos y también la propiedad `length`. Pero en el corazón es aún un objeto.

Recuerda, hay solo 7 tipos basicos en JavaScript. Array es un objeto y se comporta como un objeto..

Expand All @@ -218,7 +218,7 @@ Por ejemplo, técnicamente podemos hacer esto:
```js
let fruits = []; // crea un array

fruits[99999] = 5; // asigna una propiedad con un índice mucho mayor que su largo
fruits[99999] = 5; // asigna una propiedad con un índice mucho mayor que su longitud

fruits.age = 25; // crea una propiedad con un nombre arbitrario
```
Expand Down Expand Up @@ -253,7 +253,7 @@ La operación `shift` debe hacer 3 cosas:

1. Remover el elemento con índice `0`.
2. Mover todos lo elementos hacia la izquierda y renumerarlos: desde el índice `1` a `0`, de `2` a `1` y así sucesivamente.
3. Actualizar el largo: la propiedad `length`.
3. Actualizar la longitud: la propiedad `length`.

![](array-shift.svg)

Expand Down Expand Up @@ -329,7 +329,7 @@ En general, no deberíamos usar `for..in` en arrays.

La propiedad `length` automáticamente se actualiza cuando se modifica el array. Para ser precisos, no es la cuenta de valores del array sino el mayor índice más uno.

Por ejemplo, un elemento simple con un índice grande da un largo grande:
Por ejemplo, un elemento simple con un índice grande da una longitud grande:

```js run
let fruits = [];
Expand All @@ -342,15 +342,15 @@ Nota que usualmente no usamos arrays de este modo.

Otra cosa interesante acerca de la propiedad `length` es que se puede sobrescribir.

Si la incrementamos manualmente, nada interesante ocurre. Pero si la decrementamos, el array es truncado. El proceso es irreversible, aquí el ejemplo:
Si la incrementamos manualmente, nada interesante ocurre. Pero si la decrementamos, el array se trunca. El proceso es irreversible, aquí el ejemplo:

```js run
let arr = [1, 2, 3, 4, 5];

arr.length = 2; // truncamos a 2 elementos
alert( arr ); // [1, 2]

arr.length = 5; // reponemos el largo length
arr.length = 5; // reponemos la longitud length
alert( arr[3] ); // undefined: el valor no se recupera
```

Expand All @@ -367,7 +367,7 @@ let arr = *!*new Array*/!*("Apple", "Pear", "etc");

Es raramente usada porque con corchetes `[]` es más corto. También hay una característica peculiar con ella.

Si `new Array` es llamado con un único argumento numérico, se crea un array *sin items, pero con el largo "length" dado*.
Si `new Array` es llamado con un único argumento numérico, se crea un array *sin items, pero con la longitud "length" dada*.

Veamos cómo uno puede dispararse en el pie:

Expand All @@ -376,7 +376,7 @@ let arr = new Array(2); // ¿Creará un array de [2]?

alert( arr[0] ); // undefined! sin elementos.

alert( arr.length ); // largo 2
alert( arr.length ); // longitud 2
```

En el código anterior, `new Array(number)` tiene todos los elementos `undefined`.
Expand Down Expand Up @@ -419,9 +419,9 @@ alert( [1] + 1 ); // "11"
alert( [1,2] + 1 ); // "1,21"
```

Los arrays no tienen `Symbol.toPrimitive` ni un viable `valueOf`, ellos implementan la conversión `toString` solamente, así `[]` se vuelve una cadena vacía, `[1]` se vuelve `"1"` y `[1,2]` se vuelve `"1,2"`.
Los arrays no tienen `Symbol.toPrimitive` ni un `valueOf` viable, ellos implementan la conversión `toString` solamente, así `[]` se vuelve una cadena vacía, `[1]` se vuelve `"1"` y `[1,2]` se vuelve `"1,2"`.

Cuando el operador binario más `"+"` suma algo a una cadena, lo convierte a cadena también, entonces lo siguiente es ve así:
Cuando el operador binario más `"+"` suma algo a una cadena, lo convierte a cadena también, entonces lo siguiente se ve así:

```js run
alert( "" + 1 ); // "1"
Expand All @@ -443,10 +443,10 @@ Los arrays son una clase especial de objeto, adecuados para almacenar y manejar
let arr = new Array(item1, item2...);
```

Un llamado a `new Array(number)` crea un array con el largo dado, pero sin elementos.
Un llamado a `new Array(number)` crea un array con la longitud dada, pero sin elementos.

- La propiedad `length` es el largo del array o, para ser preciso, el último índice numérico más uno. Se autoajusta al usar los métodos de array.
- Si acortamos `length` manualmente, el array es truncado.
- La propiedad `length` es la longitud del array o, para ser preciso, el último índice numérico más uno. Se autoajusta al usar los métodos de array.
- Si acortamos `length` manualmente, el array se trunca.

Podemos usar un array como "bicola" con las siguientes operaciones:

Expand Down