Tengo los siguientes objetos usando AJAX y los almacené en una matriz:
var homes = [
{
"h_id": "3",
"city": "Dallas",
"state": "TX",
"zip": "75201",
"price": "162500"
}, {
"h_id": "4",
"city": "Bevery Hills",
"state": "CA",
"zip": "90210",
"price": "319250"
}, {
"h_id": "5",
"city": "New York",
"state": "NY",
"zip": "00010",
"price": "962500"
}
];
¿Cómo creo una función para ordenar los objetos por la price
propiedad en orden ascendente o descendente usando solo JavaScript?
javascript
arrays
sorting
TomHankers
fuente
fuente
Respuestas:
Ordenar casas por precio en orden ascendente:
O después de la versión ES6:
Alguna documentación se puede encontrar aquí .
fuente
string1.localeCompare(string2)
para la comparación de cadenaslocaleCompare()
mayúsculas y minúsculas . Si desea mayúsculas y minúsculas, puede usar(string1 > string2) - (string1 < string2)
. Los valores booleanos se convierten en enteros 0 y 1 para calcular la diferencia.localeCompare()
documentación muestra que puede indicar explícitamente si desea mayúsculas y minúsculas, clasificación numérica y otras opciones.Aquí hay una versión más flexible, que le permite crear funciones de ordenación reutilizables y ordenar por cualquier campo.
fuente
sort_by
se ejecuta en O (1) y devuelve una función utilizada por la ordenación integrada (O (N log N)) para comparar elementos en una lista. La complejidad total es O (n log n) * O (1) que se reduce a O (n log n), o lo mismo que una ordenación rápida.var key = primer ? function (x) { return primer(x[field]); } : function (x) { return x[field]; }
[1,-1][+!!reverse]
ve genial, es algo horrible de hacer. Si un usuario no puede llamar a su método correctamente, castíguelo, no intente darle sentido, pase lo que pase.Para ordenarlo, debe crear una función de comparación que tome dos argumentos. Luego llame a la función de clasificación con esa función de comparación de la siguiente manera:
Si desea ordenar de forma ascendente, cambie las expresiones a cada lado del signo menos.
fuente
para ordenar cadenas en caso de que alguien lo necesite,
fuente
Si tiene un navegador compatible con ES6 , puede usar:
La diferencia entre el orden de clasificación ascendente y descendente es el signo del valor devuelto por su función de comparación:
Aquí hay un fragmento de código que funciona:
fuente
¿Quieres ordenarlo en Javascript, verdad? Lo que quieres es la
sort()
función . En este caso, debe escribir una función de comparación y pasarlasort()
, así que algo como esto:Su comparador toma uno de cada uno de los hashes anidados dentro de la matriz y decide cuál es más alto marcando el campo "precio".
fuente
Recomiendo GitHub: Array sortBy : una mejor implementación del
sortBy
método que utiliza la transformación SchwartzianPero por ahora vamos a probar este enfoque Gist: sortBy-old.js .
Creemos un método para ordenar las matrices pudiendo organizar los objetos por alguna propiedad.
Crear la función de clasificación
Establecer datos sin clasificar
Usándolo
Organizar la matriz,
"date"
comoString
Si desea ignorar mayúsculas y minúsculas, configure la
parser
devolución de llamada:Si desea convertir el
"date"
campo comoDate
tipo:Aquí puedes jugar con el código: jsbin.com/lesebi
Gracias a @Ozesh por sus comentarios, se solucionó el problema relacionado con las propiedades con valores falsos .
fuente
var checkNaN = function (value) { return Number.isNaN(Number(value)) ? 0 : value; }
seguido de: función de retorno (matriz, o) { .... a = _getItem.call (o, a); a = checkNaN (a); b = _getItem.call (o, b); b = checkNaN (b); return o.desc * (a <b? -1: + (a> b)); });Use lodash.sortBy , (instrucciones usando commonjs, también puede poner el script include-tag para el cdn en la parte superior de su html)
Orden descendiente
Orden ascendente
fuente
const sortBy = require('lodash/sortBy'); let calendars = sortBy(calendarListResponse.items, cal => cal.summary);
import { orderBy } from 'lodash'; ... ... return orderBy ( rows, 'fieldName' ).reverse();
Esto podría haberse logrado a través de una función de clasificación simple de una línea valueof () . Ejecute el fragmento de código a continuación para ver la demostración.
fuente
Llego un poco tarde a la fiesta, pero a continuación está mi lógica para ordenar.
fuente
Si bien soy consciente de que el OP quería ordenar una serie de números, esta pregunta se ha marcado como la respuesta para preguntas similares con respecto a las cadenas. A ese hecho, las respuestas anteriores no consideran ordenar una matriz de texto donde la carcasa es importante. La mayoría de las respuestas toman los valores de cadena y los convierten a mayúsculas / minúsculas y luego los ordenan de una forma u otra. Los requisitos a los que me adhiero son simples:
Lo que espero es
[ A, a, B, b, C, c ]
pero las respuestas anteriores regresanA, B, C, a, b, c
. De hecho, me rasqué la cabeza por más tiempo de lo que quería (por eso publico esto con la esperanza de que ayude al menos a otra persona). Si bien dos usuarios mencionan lalocaleCompare
función en los comentarios para la respuesta marcada, no lo vi hasta después de tropezar con la función mientras buscaba. Después de leer la documentación de String.prototype.localeCompare () pude llegar a esto:Esto le dice a la función que ordene los valores en mayúscula antes que los valores en minúscula. El segundo parámetro en la
localeCompare
función es definir el entorno local, pero si lo deja, yaundefined
que automáticamente determina el entorno local por usted.Esto funciona igual para ordenar una matriz de objetos también:
fuente
Puede usar el
sort
método JavaScript con una función de devolución de llamada:fuente
Aquí hay una culminación de todas las respuestas anteriores.
Validación de violín: http://jsfiddle.net/bobberino/4qqk3/
fuente
Para ordenar una matriz, debe definir una función de comparación. Esta función siempre será diferente en su patrón u orden de clasificación deseado (es decir, ascendente o descendente).
Dejemos crear algunas funciones que ordenen una matriz ascendente o descendente y que contenga objetos o cadenas o valores numéricos.
Ordenar números (alfabéticamente y ascendentes):
Ordenar números (alfabéticamente y descendentes):
Ordenar números (numéricos y ascendentes):
Ordenar números (numéricamente y descendentes):
Como arriba, use el método sorterPriceAsc y sorterPriceDes con su matriz con la clave deseada.
fuente
También trabajé con algún tipo de clasificación y varios campos:
Resultado
fuente
Si bien es un poco exagerado simplemente ordenar una sola matriz, esta función prototipo permite ordenar las matrices Javascript por cualquier clave, en orden ascendente o descendente, incluidas las claves anidadas , utilizando la
dot
sintaxis.Uso:
Ordenar por propiedades anidadas con sintaxis de puntos o sintaxis de matriz:
Ordenar por múltiples claves:
Puede bifurcar el repositorio: https://github.com/eneko/Array.sortBy
fuente
sortBy
la sintaxis concisa. Fácil de usar, incluso con campos anidados, manteniendo una gran legibilidad de código. ¡Gracias!Con ECMAScript 6, la respuesta de StoBor puede hacerse aún más concisa:
fuente
Orden de precio descendente:
Orden ascendente de precio:
fuente
Si usa Underscore.js , intente sortBy:
fuente
Aquí hay una versión ligeramente modificada de implementación elegante del libro "JavaScript: The Good Parts".
NOTA : Esta versión de
by
es estable . Conserva el orden del primer tipo mientras se realiza el siguiente tipo encadenado.Le he agregado un
isAscending
parámetro. También lo convirtió aES6
estándares y partes buenas "más nuevas" según lo recomendado por el autor.Puede ordenar el orden ascendente y descendente y en cadena por múltiples propiedades.
fuente
{"first":"Curly","last":"Howard", "property" : {"id" : "1"}}
tipo de matriz por id?by
con name = "property", nestedName = "id"Solo para una matriz normal de valores de elementos:
Para una matriz de objetos:
fuente
Cree una función y ordene según la entrada usando el código a continuación
fuente
Puede usar string1.localeCompare (string2) para comparar cadenas
Tenga en cuenta que
localCompare
es caso en sensiblefuente
Para ordenar en campo de objeto de matriz múltiple. Ingrese el nombre de su campo en la
arrprop
matriz como,["a","b","c"]
luego, pasearrsource
la fuente real del segundo parámetro que queremos ordenar.fuente
Necesitarás dos funciones
Luego puede aplicar esto a cualquier propiedad de objeto:
fuente
Recientemente escribí una función universal para administrar esto por ti si quieres usarlo.
fuente
fuente
Hola, después de leer este artículo, hice un sortComparator para mis necesidades, con la funcionalidad de comparar más de un atributo json, y quiero compartirlo con ustedes.
Esta solución solo compara cadenas en orden ascendente, pero la solución puede ampliarse fácilmente para que cada atributo admita: orden inverso, otros tipos de datos, uso de configuración regional, conversión, etc.
y el resultado es
y otro tipo
con resultado
fuente
Un código simple:
fuente
http://yazilimsozluk.com/sort-array-in-javascript-by-asc-or-desc
fuente