He anidado las matrices que hizo el usuario. Quiero un código JavaScript para acceder, por ejemplo, al elemento "g" en él
var nestedArrays = [ [a,b,c,d], [e,f,[ g,h ]] ];en este ejemplo puedo acceder al elemento "g" usando este código
var element = nestedarrays[2][1][1];PERO si "g" está anidado en 100 de matrices, tengo que escribir muchos corchetes, ya que
var g = nestedArrays[2][3][1][?][?].....[?];O no sé cuánto "g" está anidado
¿HAY un código fácil para obtener cualquier elemento en las matrices anidadas con javascript o jquery puro?
Si solo está tratando de encontrar un elemento en particular, puede aplanar la matriz y encontrarlo de esa manera.
var nestedArrays = [ ['a','b','c','d'], ['e','f',[ 'g','h' ]] ]; const g = nestedArrays.flat(Infinity).find(x => x === 'g'); console.log(g); En su primer ejemplo para acceder a 'g' , debe acceder a:
[1] ) que es ['e','f',['g','h']][2] ) que es ['g','h'][0] ) y obtienes 'g' . var nestedArrays = [['a','b','c','d'],['e','f',['g','h']]]; let x = nestedArrays[1][2][0]; console.log(x); // g Entonces, a partir de eso, podemos decir que para acceder a 'g'
Necesitamos seguir este camino de índices [1,2,0]
var nestedArrays = [['a','b','c','d'],['e','f',['g','h']]]; let roadToG = [1,2,0]; for(let i = 0; i < roadToG.length; i++){ nestedArrays = nestedArrays[roadToG[i]]; } console.log(nestedArrays); // gPERO si "g" está anidado en 100 de las matrices, tengo que escribir muchos corchetes, ya que
var g = nestedArrays[2][3][1][?][?].....[?];
En caso de que queramos acceder a 'g' dinámicamente sin código duro el camino de los índices ; Debemos hacer un bucle recursivo en la matriz hasta que encontremos 'g' , en el bucle hacemos un seguimiento de la carretera
function loopRecursively( arr, x ,roadToX = []){ if(JSON.stringify(arr).indexOf(x) == -1) return null; //in edge case where there is no x in array; we just return null! for ( let i = 0; i < arr.length; i++ ) { if( arr[i] == x ){ roadToX.push(i); } else if( Array.isArray( arr[i] ) && JSON.stringify(arr[i]).indexOf(x) != -1 ){ roadToX.push(i); loopRecursively( arr[i] , x, roadToX); } } return roadToX; } let nestedArrays = [['a','b','c','d'],['e','f',['g','h']]]; console.log( loopRecursively( nestedArrays, 'g' ) ); // [1, 2, 0]