Sortează după cheia obiectului în ordine descrescătoare pe Javascript/underscore (Programare, Javascript, Array-Uri, Sortare, Underscore.Js)

fyasir a intrebat.
a intrebat.

Am următorul array de obiecte în care cheia este data în format UTC.

    Array = [{1436796000000:["Task1","Task2"],
         1437400800000:["Task4","Task8"],
         1436968800000: ["Task3","Task2"],
         1436882400000:["Task5","Task6"]}]

Vreau să sortez acest obiect array după cheie în ordine descrescătoare. Deci, rezultatul așteptat va fi următorul, cum ar fi că cea mai recentă dată va fi prima.

    Array = [{1437400800000:["Task4","Task8"],
             1436968800000: ["Task3","Task2"],
             1436882400000:["Task5","Task6"],
             1436796000000:["Task1","Task2"]}]

Cum pot face acest lucru în javascript sau folosind underscore.js?

Comentarii

  • Imposibil. Nu chiar. Cheile din array-uri sunt întotdeauna ordonate în ordine crescătoare. Trebuie doar să o parcurgeți invers! –  > Por Bergi.
3 răspunsuri
Paul

Nu, nu este un array, este un obiect, iar proprietățile obiectelor Javascript nu sunt ordonate prin definiție; deci sortarea lor nu are sens.

Ai putea în schimb să folosești un array, care are ordine, și să-ți restructurezi datele astfel:

var arr = [
  { date: 1436796000000, value: ["Task1","Task2"] },
  { date: 1437400800000, value: ["Task4","Task8"] },
  { date: 1436968800000, value: ["Task3","Task2"] },
  { date: 1436882400000, value: ["Task5","Task6"] }
]

și apoi le puteți sorta după dată:

arr.sort( function ( a, b ) { return b.date - a.date; } );

Dacă nu doriți să vă restructurați datele, puteți să le parcurgeți în ordinea dorită, obținând un tablou cu cheile sale și ordonând acel tablou, apoi utilizând acel tablou pentru a accesa proprietățile obiectului, dar va trebui să faceți acest lucru de fiecare dată când doriți să parcurgeți obiectul într-o anumită ordine, deoarece în obiect nu există încă informații de ordine stocate:

// Get the array of keys
var keys = Object.keys( obj );

// Sort the keys in descending order
keys.sort( function ( a, b ) { return b - a; } );

// Iterate through the array of keys and access the corresponding object properties
for ( var i = 0; i < keys.length; i++ ) {
    console.log( keys[i], obj[ keys[i] ] );
}

Va trebui să ajustați Object.keys pentru a fi compatibil cu IE 8 și browserele mai vechi.

Comentarii

  • Mă tem că de fapt este vorba de o matrice folosită ca obiect. –  > Por Bergi.
  • @NutBoltu, Nu, după editare ai un array cu un singur element (deci este întotdeauna primul element din array), acel element este un obiect și proprietățile sale sunt neordonate. –  > Por Paul.
  • există vreo modalitate de a ordona elementul obiect? –  > Por fyasir.
  • @NutBoltu Nu, nu există nicio modalitate. Definiția unui obiect Javascript este an **unordered** collection of properties. Puteți totuși să obțineți o matrice a cheilor obiectului, să o sortați și apoi să o iterați astfel: var keys = Object.keys( obj ); keys.sort( function ( a, b ) { return a - b; } ); for ( var i = 0; i < keys.length; i++ ) { console.log( keys[i], obj[ keys[i] ] ); } –  > Por Paul.
  • Dacă doriți să suportați IE 8 sau browsere mai vechi, va trebui să SHIM Obiect.chei pentru ca acest lucru să funcționeze: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… –  > Por Paul.
Giau Huynh

În răspunsul lui Paulpro, editez funcția de sortare a matricei javascript (ușor de înțeles):

function compare(a,b) {
   if (a.date < b.date )
     return -1;
   if (a.date  > b.date )
    return 1;
   return 0;
}
arr.sort(compare);

Aici este exemplul meu: introduceți descrierea linkului aici

Aici este postul relativ: introduceți descrierea linkului aici

Comentarii

  • De ce atât de complicat? Ce este last_nom? Și ce legătură are asta cu întrebarea? –  > Por Bergi.
  • Hm, nu există .date nici în matricea OPs. –  > Por Bergi.
  • Btw, funcția de comparație din dvs. este cam stricată –  > Por Bergi.
  • Cred că acest lucru nu are legătură cu întrebarea mea. –  > Por fyasir.
nipun

Iată ce am făcut pentru cazul meu de utilizare sper că ajută