2013-02-11 2 views
0

Я хотел бы отсортировать массив массива объектов в JavaScript на основе первого слова в строке. В настоящее время функция сортировки, которую я использую, использует все слова в строке. ДанныеСортировка массива объектов на основе первого слова

JSON:

"awds": [ 
    {"awd":"adobe edge award"}, 
    {"awd":"besty"}, 
    {"awd":"c award"}, 
    {"awd":"awwward award"}, 
    {"awd":"desk award"}, 
    {"awd":"adobe edge award"}, 
    {"awd":"creative edge award"}, 
    {"awd":"snoogle edge award"}, 
    {"awd":"scuba edge award"}, 
    {"awd":"xidoe edge award"} 
] 

JavaScript:

var compareNames = function(a, b) { 
    var nameA = a.awd.toLowerCase(); 
    var nameB = b.awd.toLowerCase(); 
    if (nameA > nameB) { return 1; } 
    return 0; 
}; 

Выходной ток:

adobe edge award 
besty 
c award 
awwward award 
desk award 
adobe edge award 
creative edge award 
snoogle edge award 
scuba edge award 
xidoe edge award 

Желаемая Выход:

adobe edge award 
adobe edge award 
awwward award 
c award 
creative edge award 
scuba edge award 
snoogle edge award 
xidoe edge award 
+0

Это не работает на всех! – gdoron

+0

Как насчет использования функции подстроки? – codemonkey

ответ

1
var o = [ 
    {"awd":"adobe edge award"}, 
    {"awd":"besty"}, 
    {"awd":"c award"}, 
    {"awd":"awwward award"}, 
    {"awd":"desk award"}, 
    {"awd":"adobe edge award"}, 
    {"awd":"creative edge award"}, 
    {"awd":"snoogle edge award"}, 
    {"awd":"scuba edge award"}, 
    {"awd":"xidoe edge award"} 
]; 

o.sort(function(a, b) { 
    var nameA = a.awd.toLowerCase(); 
    var nameB = b.awd.toLowerCase(); 
    if(nameA === nameB) return 0; 
    return nameA > nameB ? 1 : -1; 
}); 

console.log(o); 

Demo

+0

Это сработало. Спасибо. – vsiege

+0

отметьте как ответ, если это помогло u. – Jashwant

1

Вы можете использовать Array.sort с функцией сравнения. См https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/sort

+0

То, что я использую, и выход не то, что я хочу. content.awds.sort (compareNames); – vsiege

+0

Rigth, другой ответ, данный тем временем, указывает на вашу ошибку. Вам нужно вернуть не только 1 или 0, но и 1. (0 для равных) – marekful

+0

Спасибо всем за помощь. – vsiege

0

Ваш метод будет работать, если вы вернетесь -1, когда первый элемент не больше, чем второй

var compareNames = function(a, b) {  
    var nameA = a.awd.toLowerCase(); 
    var nameB = b.awd.toLowerCase(); 
    if(nameA==nameB) return 0; 
    return (nameA > nameB)? 1:-1; 
}; 
+0

Я все еще получаю тот же вывод, когда использую выше: var tempList = content.awds.sort (compareNames); для (var i = 0, lgh = tempList.length; i ", false) });