Как мне отсортировать этот массив в JavaScript? - PullRequest
2 голосов
/ 22 декабря 2009

Как мне отсортировать этот массив?

[
  {id : 1, start : 60, end : 120},
  {id : 2, start : 100, end : 240},
  {id : 3, start : 700, end : 720}
]

UPDATE: Итак, если мой массив выглядит так, могу ли я отсортировать его по начальному значению?

[{
  1:{start : 60, end : 120},
  2:{start : 100, end : 240},
  3:{start : 700, end : 720}
}]

Ответы [ 3 ]

17 голосов
/ 22 декабря 2009

То, что у вас есть, это массив объектов. Вы должны указать, как вы хотите отсортировать.

В любом случае, вы можете использовать метод sort:

var data = [{id : 1, start : 60, end : 120}, {id : 2, start : 100, end : 240},{id : 3, start : 700, end : 720}];

function sortByStart(a, b){
  return a.start - b.start;
}

data.sort(sortByStart);
1 голос
/ 22 декабря 2009

Вы можете захотеть сортировать объекты, которые могут имеют одинаковое начальное значение:

    [
      {id : 1, start : 60, end : 120},
      {id : 2, start : 100, end : 240},
      {id : 3, start : 700, end : 720}
    ]

A.sort(function(a, b){
    return a.start-b.start || a.end-b.end || a.id-b.id;
});
0 голосов
/ 23 декабря 2009

На самом деле теперь у вас есть массив из одного объекта псевдомассива. Но вы можете преобразовать этот объект в реальный массив, отсортировать его, а затем преобразовать обратно:

var originalArray = [{
    1:{start : 60, end : 120},
    2:{start : 700, end : 720},
    3:{start : 100, end : 240}
}];
var pseudoArray = originalArray[0];
var arrayToSort = [];
for (var key in pseudoArray) {
    arrayToSort.push(pseudoArray[key]);
}
arrayToSort.sort(function(left, right) {
    return left.start - right.start || left.end - right.end;
});
var resultPseudoArray = {};
for (var i = 0; i < arrayToSort.length; i++) {
    resultPseudoArray[i + 1] = arrayToSort[i];
}
var resultArray = [resultPseudoArray];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...