var ArrOfObj = [ { name: "a", value: "BNG2000" }, { name: "b", value: "BNG2001" }, { name: "c", value: "CHN-4000" }, { name: "d", value: "CHN-4004" } ]Quiero ordenar esta matriz de objetos en orden descendente según la propiedad de valor.
Respuesta esperada:
var ArrOfObj = [ { name: "d", value: "CHN-4004" }, { name: "c", value: "CHN-4000" }, { name: "b", value: "BNG2001" }, { name: "a", value: "BNG2000" } ]Necesita una función de comparación personalizada que use la propiedad de valor de sus objetos para hacer una ordenación alfabética descendente en su ArrOfObj.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
El comparador, en esta demostración que compartí aquí, extrae la parte numérica de los valores de cadena y los compara en función de cómo esos 2 números son relativos entre sí para que la matriz se ordene por propiedad de valor de manera descendente.
BNG2000 (como cadena) -> 2000 (como número)BNG2001 (como cadena) -> 2001 (como número)CHN-4000 (como cadena) -> 4000 (como número)CHN-4004 (como cadena) -> 4004 (como número) Orden de clasificación: 1: 4004, 2: 4000, 3: 2001, 4: 2000
var ArrOfObj=[ {name: "a", value:"BNG2000"}, {name: "b", value:"BNG2001"}, {name: "c", value:"CHN-4000"}, {name: "d", value:"CHN-4004"} ] function customComparer(a, b){ const value_a = parseInt( getNumberPart(a.value) ); const value_b = parseInt( getNumberPart(b.value) ); if(value_a < value_b) return 1; if(value_a > value_b) return -1; return 0; } //returns the numeric part contained in subject string function getNumberPart(subject){ let value = ''; const match = subject.match(/(\d+)/m); if (match != null) value = match[1]; return value; } ArrOfObj.sort( customComparer ); console.log(ArrOfObj); /* [ { "name": "d", "value": "CHN-4004" }, { "name": "c", "value": "CHN-4000" }, { "name": "b", "value": "BNG2001" }, { "name": "a", "value": "BNG2000" } ] */