¿Cómo puedo ordenar la siguiente matriz, en un orden personalizado, según las últimas 3 letras de prop2 que deben estar en este orden 'ABR', 'FDE', 'ZFR' y también en orden descendente 'ZFR', ' FDE', 'ARB' para otra matriz.
Ejemplo de entrada:
const arr = [ { prop1: 3, prop2: '3FDE' }, { prop1: 4, prop2: '5ZFR' }, { prop1: 5, prop2: '7ABR' } ]Rendimiento esperado:
const arr1 = [ { prop1: 5, prop2: '7ABR' }, { prop1: 3, prop2: '3FDE' }, { prop1: 4, prop2: '5ZFR' } ] and const arr2 = [ { prop1: 4, prop2: '5ZFR' }, { prop1: 3, prop2: '3FDE' }, { prop1: 5, prop2: '7ABR' } ]Puede usar los métodos Array#sort , String#substring o String#slice o String#substr y String#localCompare de la siguiente manera:
substring const arr = [ {prop1:4, prop2:'5ZFR'}, {prop1:5, prop2:'7ABR'}, {prop1:3, prop2:'3FDE'} ]; const output = arr.sort( (a,b) => a.prop2.substring(1).localeCompare( b.prop2.substring(1) ) ); console.log( output ); Con slice o substr puede usar una n negativa para indicar los últimos n caracteres:
const arr = [ {prop1:4, prop2:'5ZFR'}, {prop1:5, prop2:'7ABR'}, {prop1:3, prop2:'3FDE'} ]; const output = arr.sort( (a,b) => a.prop2.slice(-3).localeCompare( b.prop2.slice(-3) ) ); console.log( output );Array#sort , itere sobre la matriz para ordenarlaString#substr para obtener los últimos 3 caracteres y String#localeCompare para comparar las dos cadenas. const arr = [ { prop1: 3, prop2: '3FDE' }, { prop1: 4, prop2: '5ZFR' }, { prop1: 5, prop2: '7ABR' } ]; const _getLastThree = (str = '') => str.substr(str.length - 3); const res = arr.sort(({ prop2: a }, { prop2: b }) => _getLastThree(a).localeCompare(_getLastThree(b)) ); console.log(res);Simplemente use .localeCompare() en combinación con .slice() :
const arr=[ {prop1:5, prop2:'7ABR'}, {prop1:3, prop2:'3FDE'}, {prop1:4, prop2:'5ZFR'}, ] var ascArr,dscArr; console.log(ascArr=arr.slice(0).sort((a,b)=>a.prop2.slice(-3).localeCompare(b.prop2.slice(-3)))); // for descending order just do console.log(dscArr=arr.slice(0).sort((a,b)=>-a.prop2.slice(-3).localeCompare(b.prop2.slice(-3)))); // or reverse the resulting array with console.log(dscArr=ascArr.reverse()); Tenga en cuenta que los dos métodos slice() pertenecen a diferentes prototipos : .slice(0) es un método Array que esencialmente crea una copia plana de la matriz original, mientras que .slice(-3) es un método String que "elimina" el últimos tres caracteres de la cadena.