2013-06-17 3 views
0

У меня есть объект, который содержит различные ключи & их значения как массива.Сортировка массивов в объекте: Javascript

Ex.

Obj = { 
    adj_qty :[10,50], //With close to 50k elements. 
    attr_no :["DNF","DNF"], 
    qty :["10","50"], 
    art_code :["8903ABC4793","8903328757534"], 
    cost :[377.95,241.75] 
} 

Теперь я хотел отсортировать весь массив на основе ключа art_code.

Есть ли наилучший способ сортировки таких массивов?

ПРИМЕЧАНИЕ: Каждый массив имеет около элементов 50k элементов массива. поэтому я использовал этот способ для структурирования всех этих объектов в одном объекте вместо объекта в массиве.

Спасибо, с уважением.

+0

Почему бы вам не создать массив объектов, а не объект массивов? Кроме того, какой порядок должен «art_code» сортировать элементы массивов (например, путем сравнения каждого символа от начала до конца, числового сравнения (?) И т. Д.? –

+0

Это очень неэффективно с вашей текущей структурой данных. Как @Qantas 94 Heavy said, вы можете использовать массив объектов, и это поможет вам легко сортировать. – tejas

+0

вам нужно связать какие-то внутренние массивы, чтобы отсортировать их по одному из них. В противном случае будет беспорядок. Лучше измените структуру. – i100

ответ

1
var sortStack = [] 
    ,  len = Obj.art_code.length 
    ; 

// Sort by art_code, storing the sorting results 
Obj.art_code.sort(function(a, b){ 
    var res = (a>b)?-1:1; // This controls the sorting order 
    sortStack.push(res); 

    return res; 
}); 

// sort everything else in the same order 
for(var n in Obj){ 
    if(!Obj.hasOwnProperty(n) || (n === 'art_code')){ continue; } 

    var ary = sortStack.slice(); 

    // sort anything that is an array of the same length 
    Obj[n].sort 
     && (Obj[n].length === len) 
     && Obj[n].sort(function(){ return ary.shift(); }); 
} 
+0

Большое спасибо, я тоже искал .. :) –

Смежные вопросы