Javascript排序帮助

时间:2010-01-17 19:24:04

标签: javascript sorting

我正在尝试将一些xml排序到不同的数组中,我对如何处理这个问题感到有些困惑。

这是xml:http://pastebin.ca/1754892

我正在使用此xpath表达式来获取包含至少一个“item”子节点的每个“series”元素。

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 个答案:

答案 0 :(得分:1)

制作数组的另外两个副本(或三个,如果您不想使用原始数据),并使用sort方法按您指定的条件对每个数组(就地)进行排序。 / p>

类似的东西:

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
});