una tablas tabla recorrer ordenar obtener objetos editar dinamicas datos con array agregar javascript

tablas - recorrer tabla javascript



Ordenar la matriz por primer nombre(alfabéticamente) en Javascript (17)

Algo como esto:

array.sort(function(a, b){ var nameA=a.name.toLowerCase(), nameB=b.name.toLowerCase(); if (nameA < nameB) //sort string ascending return -1; if (nameA > nameB) return 1; return 0; //default return value (no sorting) });

Obtuve una matriz (ver a continuación para un objeto en la matriz) que necesito ordenar por primer nombre usando JavaScript. ¿Cómo puedo hacerlo?

var user = { bio: null, email: "[email protected]", firstname: "Anna", id: 318, lastAvatar: null, lastMessage: null, lastname: "Nickson", nickname: "anny" };


Básicamente, puede ordenar los arreglos con el método, pero si desea ordenar los objetos, debe pasar la función al método para ordenar los arreglos, así que le daré un ejemplo usando su arreglo.

user = [{ bio: "<null>", email: "[email protected]", firstname: ''Anna'', id: 318, "last_avatar": "<null>", "last_message": "<null>", lastname: ''Nickson'', nickname: ''anny'' }, { bio: "<null>", email: "[email protected]", firstname: ''Senad'', id: 318, "last_avatar": "<null>", "last_message": "<null>", lastname: ''Nickson'', nickname: ''anny'' }, { bio: "<null>", email: "[email protected]", firstname: ''Muhamed'', id: 318, "last_avatar": "<null>", "last_message": "<null>", lastname: ''Nickson'', nickname: ''anny'' }]; var ar = user.sort(function(a, b) { var nA = a.firstname.toLowerCase(); var nB = b.firstname.toLowerCase(); if(nA < nB) return -1; else if(nA > nB) return 1; return 0; });


Bonito y pequeño ES6 un trazador de líneas:

users.sort((a, b) => a.firstname !== b.firstname ? a.firstname < b.firstname ? -1 : 1 : 0);


El código más corto posible con ES6!

users.sort((a, b) => a.firstname.localeCompare(b.firstname))

String.prototype.localeCompare() el soporte básico es universal!


Empujó las respuestas superiores en un prototipo para ordenar por clave.

Array.prototype.alphaSortByKey= function (key) { this.sort(function (a, b) { if (a[key] < b[key]) return -1; if (a[key] > b[key]) return 1; return 0; }); return this; };


En caso de que estemos clasificando nombres o algo con caracteres especiales, como ñ o áéíóú (commons en español), podríamos usar los parámetros locales ( es para español en este caso) y opciones como esta:

let user = [{''firstname'': ''Az''},{''firstname'': ''Áb''},{''firstname'':''ay''},{''firstname'': ''Ña''},{''firstname'': ''Nz''},{''firstname'': ''ny''}]; user.sort((a, b) => a.firstname.localeCompare(b.firstname, ''es'', {sensitivity: ''base''})) console.log(user)

Las opciones de locale oficiales se pueden encontrar aquí en iana , es (español), de (alemán), fr (francés). Sobre sensitivity base de sensitivity significa:

Solo las cadenas que difieren en letras base se comparan como desiguales. Ejemplos: a ≠ b, a = á, a = A.


En palabras simples puedes usar este método.

users.sort(function(a,b){return a.firstname < b.firstname ? -1 : 1});


Inspirado en this respuesta,

users.sort((a,b) => (a.firstname - b.firstname));


Podemos usar localeCompare pero necesitamos verificar las claves también para los valores falsey

El siguiente código no funcionará si falta una entrada lname.

obj.sort((a, b) => a.lname.localeCompare(b.lname))

Así que tenemos que comprobar el valor de falsey como abajo

let obj=[ {name:''john'',lname:''doe'',address:''Alaska''}, {name:''tom'',lname:''hopes'',address:''California''}, {name:''harry'',address:''Texas''} ] let field=''lname''; console.log(obj.sort((a, b) => (a[field] || "").toString().localeCompare((b[field] || "").toString())));

O

Podemos usar lodash, es muy simple. Detectará los valores devueltos, es decir, si es número o cadena y se ordenará en consecuencia.

import sortBy from ''lodash/sortBy''; sortBy(obj,''name'')

https://lodash.com/docs/4.17.5#sortBy


Puede usar el método de matriz integrado - sort . Este método toma un método de devolución de llamada como parámetro

// custom sort function to be passed as param/callback to the Array''s sort method function myCustomSort(a, b) { return (a.toLowerCase() > b.toLowerCase()) ? 1 : -1; } // Actual method to be called by entity that needs sorting feature function sortStrings() { var op = Array.prototype.sort.call(arguments, myCustomSort); } // Testing the implementation var sortedArray = sortStrings("Burger", "Mayo1", "Pizza", "boxes", "Apples", "Mayo"); console.log(sortedArray); //["Apples", "boxes", "Burger", "Mayo", "Mayo1", "Pizza"]

Puntos clave a tener en cuenta para entender este código.

  1. El método personalizado, en este caso, myCustomSort , debe devolver +1 o -1 para cada comparación de pares de elementos (desde la matriz de entrada).
  2. Use toLowerCase() / toUpperCase() en el método de devolución de llamada de clasificación personalizado para que la diferencia de casos no afecte la corrección del proceso de clasificación.

Espero que esta explicación sea suficientemente clara. Siéntase libre de comentar si lo cree, se necesita más información.

¡Aclamaciones!


Puedes usar algo similar para deshacerte de las mayúsculas.

users.sort(function(a, b){ //compare two values if(a.firstname.toLowerCase() < b.firstname.toLowerCase()) return -1; if(a.firstname.toLowerCase() > b.firstname.toLowerCase()) return 1; return 0; })


Puedes usar esto para objetos

transform(array: any[], field: string): any[] { return array.sort((a, b) => a[field].toLowerCase() !== b[field].toLowerCase() ? a[field].toLowerCase() < b[field].toLowerCase() ? -1 : 1 : 0);}


Si las cadenas comparadas contienen caracteres Unicode, puede usar la función localeCompare de String clase String como la siguiente:

users.sort(function(a,b){ return a.firstname.localeCompare(b.firstname); })


Supongamos que tiene una matriz de users . Puede usar users.sort y pasar una función que toma dos argumentos y compararlos (comparador)

Debería volver

  • algo negativo si el primer argumento es menor que el segundo (debe colocarse antes del segundo en la matriz resultante)
  • algo positivo si el primer argumento es mayor (debe colocarse después del segundo)
  • 0 si esos dos elementos son iguales.

En nuestro caso, si dos elementos son a y b , queremos comparar a.firstname y b.firstname

Ejemplo:

users.sort(function(a, b){ if(a.firstname < b.firstname) { return -1; } if(a.firstname > b.firstname) { return 1; } return 0; })

Este código va a funcionar con cualquier tipo.

Tenga en cuenta que en la "vida real" ™ a menudo desea ignorar las mayúsculas y minúsculas, ordenar correctamente los signos diacríticos, símbolos extraños como ß, etc. al comparar cadenas, por lo que es posible que desee usar localeCompare . Ver otras respuestas para mayor claridad.


Una notación más compacta:

user.sort(function(a, b){ return a.firstname == b.firstname ? 0 : a.firstname < b.firstname ? -1 : 1; })


también para ambos tipos, asec y desc, u puede usar esto: supongamos que tenemos una variable SortType que especifica la clasificación ascendente o descendente que desea:

users.sort(function(a,b){ return sortType==="asc"? a.firstName.localeCompare( b.firstName): -( a.firstName.localeCompare( b.firstName)); })


underscorejs ofrece la muy buena función _.sortBy:

_.sortBy([{a:1},{a:3},{a:2}], "a")

o puedes usar una función de clasificación personalizada:

_.sortBy([{a:"b"},{a:"c"},{a:"a"}], function(i) {return i.a.toLowerCase()})