2010-06-13 7 views
1

Mon code:Comment trier un tableau concaténé en JavaScript?

var company=new Array("Kestrel Moon:","BB:"); 
var basicPri=new Array(1165,1231); 

for(var i=0;i<15;i++){ 
var companyTotal=company[i].concat(basicPri[… 

document.write(""+companyTotal+"") 

Il montre à l'écran:

Kestrel Moon: 1165

BB: 1231

Je veux trier le tableau de sorte qu'il va ordre croissant de la valeur la plus élevée des prix si il devrait l'afficher comme:

BB: 1231 
Kestrel Moon: 1165 

Un tri normal ne le ferait pas car il trierait les prix mais les noms des entreprises restent où ils sont, comment puis-je trier les deux tableaux afin qu'il affiche ce que je veux afficher?

Merci

+0

S'il vous plaît utiliser l'indentation du code. Cela le rend plus facile à lire. –

+0

utiliser les littéraux de tableau [] au lieu de new Array – evilpie

Répondre

0

En général, vous regrouperait le nom avec le numéro:

function sortNumber(a,b) 
{ 
    return b[1] - a[1]; // comparing using 2nd element 
} 

var n = [["ccc", 10.23], ["www", 23.12], ["mmm", 0.56]]; 
document.write(n.sort(sortNumber)); 

sortie:

www,23.12,ccc,10.23,mmm,0.56 

et si vous utilisez jQuery, vous pouvez créer une table à partir du résultat :

function sortNumber(a,b) 
{ 
    return b[1] - a[1]; // comparing using 2nd element 
} 

var n = [["ccc", 10.23], ["www", 23.12], ["mmm", 0.56]]; 
sorted = n.sort(sortNumber); 

$('body').append('<table id="thetable"></table>'); 
$('#thetable').css({borderCollapse: 'collapse'}) 
for (i = 0; i < sorted.length; i++) { 
    $('#thetable').append('<tr><td>' + sorted[i][0] + '</td><td>' + sorted[i][1] + '</td></tr>') 
} 
$('td').css({ border: '1px solid #ccc', padding: '0.2em 1em' }); 
0

Une sorte normale ne serait pas le faire car il trier les prix, mais les noms de sociétés restent là où ils sont ...

Dans ce cas, un tableau d'objets serait probablement une meilleure structure de données pour votre Les données. Prenons l'exemple ci-dessous:

var dict = [ 
    {company: 'Kestrel Moon:', basicPri: '1165'}, 
    {company: 'BB:', basicPri: '1231'} 
]; 

var sorted = dict.sort(function(a, b) { 
    return a.company.localeCompare(b.company); 
}); 

console.log(sorted[0].company + ' ' + sorted[0].basicPri); 
console.log(sorted[1].company + ' ' + sorted[1].basicPri); 

// Prints: 
// ------------------ 
// BB: 1231 
// Kestrel Moon: 1165 
0

est ici possible en utilisant votre code en tant que base (à savoir 2 tableaux):

// comparaison functor 
function sorter(a, b) { 
    return a.name.localeCompare(b.name); 
} 

// build a sorted array of object like 
// [ { "name": "foo", price: 123 }, ... ] 
// sorted by company name (Locale aware order) 
function mysort(comp, prices) { 
    var res = []; 

    for (var i = 0; i < comp.length; i++) { 
     res.push({"name": comp[i], "price": prices[i]}); 
    } 

    return res.sort(sorter); 
} 

var company = ["Kestrel Moon:", "BB:"]; 
var basicPri = [1165, 1231]; 
var companyTotal = ""; 
var arr = mysort(company, basicPri); 

for (var i in arr) { 
    companyTotal += arr[i].name + " " + arr[i].price + "<br/>"; 
} 

document.write(companyTotal); 

testé sur 6.0.427.0 chrome dev