2010-01-17 90 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