【问题标题】:Javascript sort helpJavascript 排序帮助
【发布时间】:2010-01-17 19:24:04
【问题描述】:

我正在尝试将一些 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”属性(作为数字)进行数字排序。
为每个“标题”子元素的文本按字母顺序排序的数组。
每个“项目”子元素按日期排序的数组。

我知道如何使用 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) 将是“标题”元素。

【问题讨论】:

    标签: javascript sorting


    【解决方案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
    });
    

    【讨论】:

    • 谢谢,我没有意识到我可以在数组上使用 .slice()。我认为 map() 是将数组传输到新数组的唯一方法。干杯。