2010-01-17 63 views
1

我想將一些xml排序到不同的數組中,我有點卡住如何去做這件事。Javascript排序幫助

這裏是XML:http://pastebin.ca/1754892

我使用這個XPath表達式獲取包含至少一個「項目」的子節點的每一個「系列」的元素。

 
var ceerez = theXML.evaluate('//series[item]' ,theXML, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); 

然後我遍歷結果,並把元素的規則陣列:

var newArr=[]; 
for (var m = 0; m < ceerez.snapshotLength; m++){ 
    newArr.push(ceerez.snapshotItem(m)); 
} 

所以我想下一步要做什麼是映射和排序newArr數組中的元素爲每個不同類型的新陣列。

我想要一個數組按照每個串聯元素的「pub」屬性(如數字)進行數字排序。
一個數組按字母順序排序,用於每個「標題」子元素的文本。
一個按日期排序的每個「item」子元素的數組。我知道如何使用sort()方法做到這一點,但我無法弄清楚如何從map()方法中做到這一點,以便我可以將它變成一個新的數組。

var a2z1 = newArr.map(function(item){ 
    item 
.sort(function(a,b) { 
    return a.firstElementChild.textContent.toLowerCase().replace(/[^a-z,0-9]/gm, '') < b.firstElementChild.textContent.toLowerCase().replace(/[^a-z,0-9]/gm, '') ? -1 : 1; 
    }); 
); 

(a.firstElementChild)將是「title」元素。

回答

1

製作另外兩份數組(或三份,如果您不想使用原件),並使用sort方法,按照您指定的標準對每個數組進行排序。

喜歡的東西:

var copy1 = newArr.slice(0); 
var copy2 = newArr.slice(0); 
var copy3 = newArr.slice(0); 

copy1.sort(function (a, b) { 
    // sort logic 
}); 
copy2.sort(function (a, b) { 
    // sort logic 
}); 
copy3.sort(function (a, b) { 
    // sort logic 
}); 
+0

謝謝,我不知道我可以在陣列上使用.slice()。我認爲map()是將數組傳輸到新數組的唯一方法。 乾杯。 – Yansky 2010-01-18 03:50:22