/* patrón: e,b,c,d,i,f,g,h,o,j,k,l,m,n,u,p,q,r,s,t,a,v,w, x, y, z
Quiero ordenar mis palabras de arr por la segunda letra de cada palabra de acuerdo con mi patrón dado.
['aobcdh','aiaabch','obijkl']
#salida debe ser: obijkl aiabch aobcdh */
// Probé de esta manera:
let pattern = ['e', 'b', 'c', 'd', 'i', 'f', 'g', 'h', 'o', 'j', 'k', 'l', 'm', 'n', 'u', 'p', 'q', 'r', 's', 't', 'a', 'v', 'w', 'x', 'y', 'z'] let arr = ['aiabch', 'aobcdh', 'obijkl', 'apcsdef', 'leeeeeeeeeeeeeeee'] let refArr = [] for (let i = 0; i < arr.length; i++) { for (let j = 0; j < pattern.length; j++) { if (pattern[j] === arr[i][1]) { refArr.push(j) } } } console.log(refArr)// ahora que sigue?
Puede usar el método de clasificación y la función indexOf
let pattern = ['e', 'b', 'c', 'd', 'i', 'f', 'g', 'h', 'o', 'j', 'k', 'l', 'm', 'n', 'u', 'p', 'q', 'r', 's', 't', 'a', 'v', 'w', 'x', 'y', 'z'] let arr = ['aiabch', 'aobcdh', 'obijkl', 'apcsdef', 'leeeeeeeeeeeeeeee'] const newArr = arr.sort((a, b) => pattern.indexOf(a[1]) - pattern.indexOf(b[1])) console.log(newArr)Podría generar un objeto con los valores de orden y ordenar por estos valores.
Si es necesario, convierta la clave a minúsculas y/o tome un valor predeterminado para ordenar las letras desconocidas al principio o al final.
const pattern = 'ebcdifghojklmnupqrstavwxyz', array = ['aobcdh', 'aiabch', 'obijkl'], order = Object.fromEntries(Array.from(pattern, (l, i) => [l, i + 1])); array.sort((a, b) => order[a[1]] - order[b[1]]); console.log(array);Además, puede probar esto si no conoce los métodos de matriz.
let pattern = ['e', 'b', 'c', 'd', 'i', 'f', 'g', 'h', 'o', 'j', 'k', 'l', 'm', 'n', 'u', 'p', 'q', 'r', 's', 't', 'a', 'v', 'w', 'x', 'y', 'z'], arr = ['aiabch', 'aobcdh', 'obijkl', 'apcsdef', 'leeeeeeeeeeeeeeee'], refArr = [] arr.forEach(a => pattern.includes(a[2]) ? refArr.push(a) : null) console.log(refArr)