Справка по сортировке по JavaScript - PullRequest
1 голос
/ 17 января 2010

Я пытаюсь отсортировать некоторые XML-файлы в разные массивы, и я немного застрял в том, как это сделать.

Вот XML: http://pastebin.ca/1754892

Я использую это выражение xpath для получения каждого элемента "series", который содержит хотя бы один дочерний узел "item".

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" (как числа) для каждого элемента серии.
Один массив, отсортированный в алфавитном порядке для текста каждого дочернего элемента title.
Один массив, отсортированный по дате для каждого дочернего элемента «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 Ответ

1 голос
/ 18 января 2010

Сделайте две другие копии массива (или три, если вы не хотите использовать оригинал) и, используя метод 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
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...