Добрый день.
Совершенно неожиданно натолкнулся на проблему — сортировка массива в браузере и node.js-сервере работает по-разному. Точнее, в браузере всё хорошо, а вот на бэкэнде проблема.
Исходные данные:
var a = [{ distributor: 'igx4u_com', price: '24.99' },
{ distributor: 'online-gold*de', price: '18.35' },
{ distributor: 'gametrack', price: '35.95' },
{ distributor: 'de.gamecard.mobi', price: '16.75' },
{ distributor: 'playsmarty2008', price: '35.95' },
{ distributor: 'rpg-services', price: '26.9' },
{ distributor: 'keymbo*com', price: '16.85' },
{ distributor: 'de.gamecard.mobi', price: '24.99' },
{ distributor: 'online-gold*de', price: '16.85' },
{ distributor: 'keys4games_shop', price: '79.99' },
{ distributor: 'de.gamecard.mobi', price: '16.99' },
{ distributor: 'igx4u_com', price: '16.99' },
{ distributor: 'keymbo*com', price: '11.9' },
{ distributor: 'online-gold*de', price: '14.95' },
{ distributor: 'playsmarty2008', price: '26.85' },
{ distributor: 'rpg-services', price: '19.9' },
{ distributor: 'timegold_europe', price: '19.44' },
{ distributor: 'keymbo*com', price: '16.85' },
{ distributor: 'rpg-services', price: '18.9' },
{ distributor: 'www_g2a_com', price: '16.85' }
];
Код функции:
function f(arr, field1, field2) {
var mysort = function (field1, field2) {
return function (x, y) {
return (x[field1] == y[field1]) ? x[field2] > y[field2] : x[field1] > y[field1];
}
};
return arr.sort(mysort(field1, field2));
}
То есть функция сортирует массив объектов по двум полям (по возрастанию). Правильный результат:
Object { distributor="de.gamecard.mobi", price="16.75"}
Object { distributor="de.gamecard.mobi", price="16.99"}
Object { distributor="de.gamecard.mobi", price="24.99"}
Object { distributor="gametrack", price="35.95"}
Object { distributor="igx4u_com", price="16.99"}
Object { distributor="igx4u_com", price="24.99"}
Object { distributor="keymbo*com", price="11.9"}
Object { distributor="keymbo*com", price="16.85"}
Object { distributor="keymbo*com", price="16.85"}
Object { distributor="keys4games_shop", price="79.99"}
Object { distributor="online-gold*de", price="14.95"}
Object { distributor="online-gold*de", price="16.85"}
Object { distributor="online-gold*de", price="18.35"}
Object { distributor="playsmarty2008", price="26.85"}
Object { distributor="playsmarty2008", price="35.95"}
Object { distributor="rpg-services", price="18.9"}
Object { distributor="rpg-services", price="19.9"}
Object { distributor="rpg-services", price="26.9"}
Object { distributor="timegold_europe", price="19.44"}
Object { distributor="www_g2a_com", price="16.85"}
Результат node.js:
{ distributor: 'de.gamecard.mobi', price: '16.99' }
{ distributor: 'igx4u_com', price: '24.99' }
{ distributor: 'gametrack', price: '35.95' }
{ distributor: 'de.gamecard.mobi', price: '16.75' }
{ distributor: 'igx4u_com', price: '16.99' }
{ distributor: 'de.gamecard.mobi', price: '24.99' }
{ distributor: 'online-gold*de', price: '14.95' }
{ distributor: 'keymbo*com', price: '16.85' }
{ distributor: 'keys4games_shop', price: '79.99' }
{ distributor: 'online-gold*de', price: '16.85' }
{ distributor: 'playsmarty2008', price: '26.85' }
{ distributor: 'rpg-services', price: '18.9' }
{ distributor: 'timegold_europe', price: '19.44' }
{ distributor: 'www_g2a_com', price: '16.85' }
P.S. именование функций, переменных, данных итд — в данном случае неважно, т.к. это сильно упрощённый пример.
В чём дело?
Неужели вместо дефолтной .sort() надо писать что-то своё?