2015-08-04 3 views
-1

Есть много вопросов, подобных этому, но я не мог найти ничего подобного. Вот мой код.Сортировка объекта javascript

for (var i = 0; i < count_batters; i++) { 
    var post = { 
    player_name: jsonData[i].player_name, 
    fantasy_points: jsonData[i].avg_fpts_fd 
    } 
    console.log(post); 

    function compare(a,b) { 
    if (a.fantasy_points < b.fantasy_points) 
     return -1; 
    if (a.fantasy_points > b.fantasy_points) 
     return 1; 
    return 0; 
    } 

    post.sort(compare); 

Я хочу отсортировать "пост" от "fantasy_points". По умолчанию оно сортируется по имени игрока. Я пробовал .sort(), который не работает над этим объектом. Ошибка приведенного выше кода undefined is not a function

+2

Что именно вы пытаетесь разобраться? 'post' - это единственный объект, он не имеет смысла пытаться его сортировать. – JJJ

+0

'undefined 'не является функцией', потому что у объекта нет метода 'sort' (если вы его не дадите). Массив, но у вас нет массива. –

+0

А, это хороший момент. Сообщение SO всегда является одним объектом, хотя, когда цикл завершен, существует более 300 строк? Я пытаюсь сортировать результат цикла. – CiscoKidx

ответ

3

Нажмите на объекты в массив, то вы можете сортировать массив:

var posts = []; 

for (var i = 0; i < count_batters; i++) { 
    var post = { 
    player_name: jsonData[i].player_name, 
    fantasy_points: jsonData[i].avg_fpts_fd 
    }; 
    posts.push(post); 
} 

function compare(a,b) { 
    if (a.fantasy_points < b.fantasy_points) 
    return -1; 
    if (a.fantasy_points > b.fantasy_points) 
    return 1; 
    return 0; 
} 

posts.sort(compare); 
+0

Спасибо, но эта толпа суровая .... – CiscoKidx

-4

Похоже, что функция сравнения находится внутри цикла for? Если вы выберете это, я думаю, что это сработает. Или вы могли бы просто поставить анонимную функцию в качестве своего рода функцию сравнения

post.sort(function(a,b) { 
    if (a.fantasy_points < b.fantasy_points) 
    return -1; 
    if (a.fantasy_points > b.fantasy_points) 
    return 1; 
    return 0; 
}