Сортировка JS работает в Firefox, но не в IE - не могу понять, почему

У меня есть строка в функции JavaScript, которая сортирует массив объектов на основе порядка другого массива строк. Это работает в Firefox, но не в IE, и я не знаю почему. Вот как выглядят мои данные при вызове сортировки в IE7. (Я использую массив из трех элементов, чтобы проиллюстрировать это здесь).

//cherry first then the rest in alphabetical order
originalData = ['cherry','apple','banana','clementine','nectarine','plum']

//data before sorting - note how clementine is second item - we wan to to to be after apple and banana
csub = [
  {"value":"cherry","data":["cherry"],"result":"cherry"},
  {"value":"clementine","data":["clementine"],"result":"clementine"},
  {"value":"apple","data":["apple"],"result":"apple"},
  {"value":"banana","data":["banana"],"result":"banana"},
  {"value":"nectarine","data":["nectarine"],"result":"nectarine"},
  {"value":"plum","data":["plum"],"result":"plum"}
]

//after sorting, csub has been rearranged but still isn't right: clementine is before banana. in FF it's in the right place.
csubSorted = [
  {"value":"cherry","data":["cherry"],"result":"cherry"},
  {"value":"apple","data":["apple"],"result":"apple"},
  {"value":"clementine","data":["clementine"],"result":"clementine"},
  {"value":"banana","data":["banana"],"result":"banana"},
  {"value":"nectarine","data":["nectarine"],"result":"nectarine"},
  {"value":"plum","data":["plum"],"result":"plum"}
]

Вот фактический код сортировки:

 csubSorted = csub.sort(function(a,b){ return (originalData.indexOf(a.value) > originalData.indexOf(b.value)); });

Кто-нибудь может понять, почему это не сработает? Является ли базовая функция сортировки javascript несовместимой с браузером? Могу ли я сделать это по-другому (например, с JQuery), который будет кросс-браузер?

благодарен за любой совет - макс

РЕДАКТИРОВАТЬ - это также не работает в Safari и Chrome - другими словами, это работает только в Firefox.

РЕШЕНО - спасибо Тиму Дауну. Я на самом деле сделал свой код проще, потому что я понял, что порядок, в котором я нуждался, всегда был «первым элементом в возвращаемом массиве, за которым следовал остаток массива, отсортированный с использованием .value». Итак, я изменил свой код таким образом:

  first = csub.shift();
  csubSorted = csub.sort(function(a,b){ 
    return (a.value > b.value); 
  });
  csubSorted.unshift(first);

Но это все еще не работало. Затем Тим (ниже) указал, что sort ожидает получить обратно -1, 0 или 1 из функции, а НЕ истину или ложь, что и было в моем коде. Очевидно, Firefox позволяет вам сойти с рук, но другие браузеры этого не делают. Все, что требовалось, - это «перевести» true или false в 1 и -1 (я не волнуюсь о случае, когда обе строки являются samae, эффективно, что будет возвращено как -1, что не будет иметь никакого значения для порядок сортировки в любом случае):

  first = csub.shift();
  csubSorted = csub.sort(function(a,b){ 
    return (a.value > b.value ? 1 : -1); 
  });
  csubSorted.unshift(first);

Тим также сказал мне, что array.indexOf () не поддерживается в IE, что раздражает, хотя я не использую его здесь больше, я использую его в других частях кода. Goddamit. Есть ли где-нибудь страница API, на которой определенно указан только кросс-браузерный API-интерфейс, совместимый с javscript?

Ответы на вопрос(1)

Ваш ответ на вопрос