javascript: varios datos en una matriz, pero solo se ordenan por nombre
Tengo una matriz actualmente solo con nombres porque no puedo encontrar la manera de agregar más información pero no hacer que el script clasifique esos datos. Para cada entrada en la matriz, deseo agregar un número entre 1 y 20 para cada una, y también contar cuántas se nombran con ese nombre. Entonces sería algo así como 1. Nielsen (100,000). Es solo un problema con mi segunda función porque necesito ordenarla por longitud.
<script>
var arr = []
arr[0] = " Nielsen"
arr[1] = " Jensen"
arr[2] = " Hansen"
arr[3] = " Pedersen"
arr[4] = " Andersen"
arr[5] = " Christensen"
arr[6] = " Larsen"
arr[7] = " Sørensen"
arr[8] = " Rasmussen"
arr[9] = " Jørgensen"
arr[10] = " Petersen"
arr[11] = " Madsen"
arr[12] = " Kristensen"
arr[13] = " Olsen"
arr[14] = " Thomsen"
arr[15] = " Christiansen"
arr[16] = " Poulsen"
arr[17] = " Johansen"
arr[18] = " Møller"
arr[19] = " Mortensen"
document.getElementById("liste").innerHTML = arr; // Skriver den oprindelige rækkefølge
function Sorter1() {
arr.sort(); // Sorter efter aflabetisk rækkefølge
document.getElementById("liste").innerHTML = arr; // Skriver rækkefølgen
}
function Sorter2() {
arr.sort(function (a, b) {
return b.length - a.length || // sorter efter længde
a.localeCompare(b); // Sorter efter aflabetisk rækkefølge
});
document.getElementById("liste").innerHTML = arr; // Skriver rækkefølgen
}
</script>
------------Respuesta------------
Si entiendo que corrige, le gustaría crear una matriz multidimensional y luego ordenarla por nombre alfabéticamente y por número de caracteres. Si eso es correcto, le sugiero que cree un objeto multidimensional con los datos necesarios. Entonces podrá ordenar la clave de nombre y conservar la otra información correctamente.
Mira esto, puede llevarte en la dirección correcta
var arr = [
{
name: 'Nielsen',
num: 1,
count: 100
},
{
name: 'Jensenlongest',
num: 15,
count: 230
},
{
name: 'Jensenlong',
num: 13,
count: 500
},
{
name: 'Jensen',
num: 2,
count: 300
},
{
name: 'Hansen',
num: 5,
count: 400
}
]
// Just adds the unsorted arr to the list for demo purpose
updateList(arr)
// On "Sort by length" button click
document.getElementById('sort-by-length').addEventListener('click', function (event) {
arr.sort(sortNameByLength);
updateList(arr);
})
// On "Sort alphabetically" button click
document.getElementById('sort-alphabetically').addEventListener('click', function (event) {
arr.sort(sortNameAlphabetically);
updateList(arr);
})
// Sort by name alphabetically
function sortNameAlphabetically(a, b) {
return a.name > b.name
}
// Sort by name length
function sortNameByLength(a, b) {
return a.name.length - b.name.length
}
// Updates the list according to the current sorting of the arr
function updateList(names) {
var listHtml = ''
names.forEach(function (item, index) {
listHtml += item.name + ', ' + item.num + ' (' + item.count + ')<br>'
})
document.getElementById("liste").innerHTML = listHtml
}
https://jsfiddle.net/sbe8yzv0/4/
Esto dará como resultado una lista como esta.
Hansen, 5 (400)
Jensen, 2 (300)
Jensenlong, 13 (500)
Jensenlongest, 15 (230)
Nielsen, 1 (100)
------------Respuesta------------
Puede usar una matriz de objetos complejos con la estructura de datos que desee (solo sea coherente). Luego defina su propio método sort() que comparará solo el parámetro de nombre de sus objetos. He aquí un ejemplo sencillo:
var arr = [];
arr[0] = {ID: 1, Name: "Nielsen", Value: "100"};
arr[0] = {ID: 2, Name: "Jensen", Value: "200"};
// Sort based on the second column, 'Name'.
function sortByName(){
arr.sort(
function(x, y){
return x.Name > y.Name; // Compare and sort based on the 'Name' column only.
}
);
console.log(arr[0]); // If results are correct this is 'Jensen'.
console.log(arr[1]); // If results are correct this is 'Nielsen'.
}
Adapte esto a sus necesidades (agregue las columnas y los datos apropiados, agregue las variables apropiadas, hágalo para que se muestre en el HTML de su página) y hará lo que quiera.
Etiquetas: sorting list arrays javascript
Artículos relacionados:
redes: ¿por qué 802.1Q no encapsula el marco original?
javascript - Uso de JSONAPI con servicio
- javascript - use jquery mmenu con Magento
- c# - Estratificación de formularios de Windows
- r - Variables en Shiny a un archivo de origen a través del entorno
- mysql: estoy usando php para insertar campos en una tabla MySq. Mi script php más nuevo está fallando con el siguiente error
- agnóstico del idioma: ¿un GUID es único el 100% del tiempo?
- Outlook: campo personalizado en la entrada del calendario office365
- php - Cómo pasar una cadena desde el área de texto de Webix a la función Button, s
- android: hace que el inicio de una actividad en un proceso diferente sea más rápido
- ibm cloud: cómo incluir servicios de texto a voz de bluemix mediante Node
- angular - Angular2 rc.6 proporciona ya no existe
- c++ - ¿Cómo puedo poner QTableWidgetItem en modo de edición?
- ¿Cómo manejar las solicitudes de verbo HTTP PROPFIND (u otras) en ASP.NET Core?
- Java: se obtiene un error con el complemento jenkins y maven surefire
- javascript - Intentando invocar la función python desde js usando jQuery y Flask
- c++ - error: ,A, es una base inaccesible de ,B,
Artículos calientes
- medicina china para la bronquitis
- Diferencia entre infección de las vías respiratorias superiores y bronquitis
- ¿Qué causa la epididimitis?
- Criterios diagnósticos de cálculos renales
- ¿Qué medicamento la masturbación causa prostatitis?
- ¿Cuáles son los factores de padecer gota?
- Qué comer durante la convalecencia de una hemorragia cerebral
- que es el alzheimer
- Principales criterios diagnósticos de las bronquiectasias
- ¿Cuáles son las formas de prevenir y tratar la menstruación irregular en las mujeres?
- Síntomas de gota de ternera
- Saco gestacional de 5x4mm cuanto dura el embarazo
- La diferencia entre espinillas y espinillas de ácaros
- Por qué frotar con jengibre puede tratar la caída del cabello
- ¿Cuánto tiempo se puede vivir con insuficiencia hepática?