--- id: 587d7b7b367417b2b2512b16 title: Create complex multi-dimensional arrays challengeType: 1 videoUrl: '' localeTitle: Crear complejos arreglos multidimensionales. --- ## Description
¡Increíble! ¡Acabas de aprender un montón de arreglos! Este ha sido un resumen de nivel bastante alto, y hay mucho más que aprender sobre el trabajo con matrices, muchas de las cuales veremos en secciones posteriores. Pero antes de pasar a mirar Objetos , echemos un vistazo más y veamos cómo los arreglos pueden volverse un poco más complejos de lo que hemos visto en desafíos anteriores. Una de las características más poderosas cuando se piensa en los arreglos como estructuras de datos, es que los arreglos pueden contener, o incluso estar completamente compuestos de otros arreglos. Hemos visto matrices que contienen matrices en desafíos anteriores, pero bastante simples. Sin embargo, las matrices pueden contener una profundidad infinita de matrices que pueden contener otras matrices, cada una con sus propios niveles arbitrarios de profundidad, y así sucesivamente. De esta manera, una matriz puede convertirse muy rápidamente en una estructura de datos muy compleja, conocida como una matriz multidimensional o anidada. Considere el siguiente ejemplo:
Deje nestedArray = [// top, o primer nivel: la matriz más externa
['deep'], // una matriz dentro de una matriz, 2 niveles de profundidad
El
['deep'], ['deep'] // 2 arreglos anidados 3 niveles de profundidad
]
El
El
['deepest'], ['deepest'] // 2 arrays anidados 4 niveles de profundidad
]
El
El
['deepest-est?'] // una matriz anidada 5 niveles de profundidad
]
]
]
];
Si bien este ejemplo puede parecer complicado, este nivel de complejidad no es inaudito, o incluso inusual, cuando se trata de grandes cantidades de datos. Sin embargo, aún podemos acceder fácilmente a los niveles más profundos de una matriz de este complejo con notación de corchetes:
console.log (nestedArray [2] [1] [0] [0] [0]);
// logs: deepest-est?
Y ahora que sabemos dónde se encuentra ese dato, podemos restablecerlo si necesitamos:
nestedArray [2] [1] [0] [0] [0] = 'deep still still';

console.log (nestedArray [2] [1] [0] [0] [0]);
// ahora registra: aún más profundo
## Instructions
Hemos definido una variable, myNestedArray , igual a una matriz. Modifique myNestedArray , utilizando cualquier combinación de cadenas , números y valores booleanos para los elementos de datos, de modo que tenga exactamente cinco niveles de profundidad (recuerde, la matriz más externa es el nivel 1). En algún lugar en el tercer nivel, incluye la cadena 'deep' , en el cuarto nivel, incluyen la cadena 'deeper' , y en el quinto nivel, incluyen la cadena 'deepest' .
## Tests
```yml tests: - text: 'myNestedArray debe contener solo números, booleanos y cadenas como elementos de datos' testString: 'assert.strictEqual((function(arr) { let flattened = (function flatten(arr) { const flat = [].concat(...arr); return flat.some (Array.isArray) ? flatten(flat) : flat; })(arr); for (let i = 0; i < flattened.length; i++) { if ( typeof flattened[i] !== "number" && typeof flattened[i] !== "string" && typeof flattened[i] !== "boolean") { return false } } return true })(myNestedArray), true, "myNestedArray should contain only numbers, booleans, and strings as data elements");' - text: myNestedArray debe tener exactamente 5 niveles de profundidad testString: 'assert.strictEqual((function(arr) {let depth = 0;function arrayDepth(array, i, d) { if (Array.isArray(array[i])) { arrayDepth(array[i], 0, d + 1);} else { depth = (d > depth) ? d : depth;}if (i < array.length) { arrayDepth(array, i + 1, d);} }arrayDepth(arr, 0, 0);return depth;})(myNestedArray), 4, "myNestedArray should have exactly 5 levels of depth");' - text: myNestedArray debe contener exactamente una aparición de la cadena "deep" en una matriz anidada con 3 niveles de profundidad testString: 'assert((function howDeep(array, target, depth = 0) {return array.reduce((combined, current) => {if (Array.isArray(current)) { return combined.concat(howDeep(current, target, depth + 1));} else if (current === target) { return combined.concat(depth);} else { return combined;}}, []);})(myNestedArray, "deep").length === 1 && (function howDeep(array, target, depth = 0) {return array.reduce((combined, current) => {if (Array.isArray(current)) { return combined.concat(howDeep(current, target, depth + 1));} else if (current === target) { return combined.concat(depth);} else { return combined;}}, []);})(myNestedArray, "deep")[0] === 2, "myNestedArray should contain exactly one occurrence of the string "deep" on an array nested 3 levels deep");' - text: myNestedArray debe contener exactamente una aparición de la cadena "deeper" deep "deeper" en una matriz anidada con 4 niveles de profundidad testString: 'assert((function howDeep(array, target, depth = 0) {return array.reduce((combined, current) => {if (Array.isArray(current)) { return combined.concat(howDeep(current, target, depth + 1));} else if (current === target) { return combined.concat(depth);} else { return combined;}}, []);})(myNestedArray, "deeper").length === 1 && (function howDeep(array, target, depth = 0) {return array.reduce((combined, current) => {if (Array.isArray(current)) { return combined.concat(howDeep(current, target, depth + 1));} else if (current === target) { return combined.concat(depth);} else { return combined;}}, []);})(myNestedArray, "deeper")[0] === 3, "myNestedArray should contain exactly one occurrence of the string "deeper" on an array nested 4 levels deep");' - text: myNestedArray debe contener exactamente una aparición de la cadena "deepest" en una matriz anidada con 5 niveles de profundidad testString: 'assert((function howDeep(array, target, depth = 0) {return array.reduce((combined, current) => {if (Array.isArray(current)) { return combined.concat(howDeep(current, target, depth + 1));} else if (current === target) { return combined.concat(depth);} else { return combined;}}, []);})(myNestedArray, "deepest").length === 1 && (function howDeep(array, target, depth = 0) {return array.reduce((combined, current) => {if (Array.isArray(current)) { return combined.concat(howDeep(current, target, depth + 1));} else if (current === target) { return combined.concat(depth);} else { return combined;}}, []);})(myNestedArray, "deepest")[0] === 4, "myNestedArray should contain exactly one occurrence of the string "deepest" on an array nested 5 levels deep");' ```
## Challenge Seed
```js let myNestedArray = [ // change code below this line ['unshift', false, 1, 2, 3, 'complex', 'nested'], ['loop', 'shift', 6, 7, 1000, 'method'], ['concat', false, true, 'spread', 'array'], ['mutate', 1327.98, 'splice', 'slice', 'push'], ['iterate', 1.3849, 7, '8.4876', 'arbitrary', 'depth'] // change code above this line ]; ```
## Solution
```js // solution required ```