ultimo last ejemplo caracter javascript arrays substring

last - substring javascript ejemplo



¿Cómo obtener todas las subcadenas(subsecuencias contiguas) de mi matriz de JavaScript? (6)

Mi tarea es dividir la matriz dada en matrices más pequeñas usando JavaScript. Por ejemplo, [1, 2, 3, 4] debe dividir en [1] [1, 2] [1, 2, 3] [1, 2, 3, 4] [2] [2, 3] [2, 3, 4] [3] [3, 4] [4] .

Estoy usando este código:

let arr = [1, 2, 3, 4]; for (let i = 1; i <= arr.length; i++) { let a = []; for (let j = 0; j < arr.length; j++) { a.push(arr[j]); if (a.length === i) { break; } } console.log(a); }

Y obtengo el siguiente resultado: [1] [1, 2] [1, 2, 3] [1, 2, 3, 4] undefined

¿Qué me estoy perdiendo / haciendo mal?


Para la matriz interna, puede comenzar con el índice de la matriz externa.

var array = [1, 2, 3, 4], i, j, l = array.length, result = []; for (i = 0; i < l; i++) { for (j = i; j < l; j++) { result.push(array.slice(i, j + 1)); } } console.log(result.map(a => a.join('' '')));

.as-console-wrapper { max-height: 100% !important; top: 0; }


Prueba esto

let arr = [1, 2, 3, 4]; for (let i = 0; i <= arr.length; i++) { let a = []; for (let j = i; j < arr.length; j++) { a.push(arr[j]); console.log(a); } }


Tengo que preparar stackblitz para este caso.

let source = [1,2,3,4]; const output = []; const arrayMultiplier = (source) => { const eachValueArray = []; source.forEach((item, index) => { // Will push new array who will be sliced source array. eachValueArray.push(source.slice(0, source.length - index)); }); //We reverse array to have right order. return eachValueArray.reverse(); }; for(let i = 0; i <= source.length; i++) { output.push(...arrayMultiplier(source)); source.shift(); // Will recraft source array by removing first index. } //Don''t forget last item. output.push(source); console.log(output);

No es la solución más corta pero haz el trabajo

== actualización después de la revisión del código ==

// [...] const arrayMultiplier = (source) => { // Will push new array who will be sliced source array. // We reverse array to have right order. return source.map((item, index) => source.slice(0, source.length - index)).reverse(); }; // [...]


Tienes dos problemas en tu código:

  1. Debe tener un bucle para inicializar con el valor de i para el bucle interno para que considere el siguiente índice para la nueva iteración de i
  2. Es necesario eliminar esa break en la longitud que tiene en el bucle interno.

let arr = [1, 2, 3, 4]; for (let i = 0; i <= arr.length; i++) { let a = []; for (let j = i; j < arr.length; j++) { a.push(arr[j]); console.log(a); } }


Usa dos iteraciones

  1. obtener matriz de segmento basado en el índice de bucle.
  2. usar matriz cortada y combinar elemento de matriz.

var arr = [1, 2, 3, 4]; let newArra =[]; arr.map((x,i)=> { let remainArr = arr.slice(i); return remainArr.forEach((y, r) => newArra.push(remainArr.slice(0, r+1))) }) newArra.forEach(x=> console.log(x))


Si no quieres mutar tu matriz.

let arr = [1, 2, 3, 4]; let res = []; for (let i = 0; i <= arr.length; i++) { let a = []; for (let j = i; j < arr.length; j++) { a = [...a, arr[j]]; res = [...res, a]; } } console.log(res);