2015-11-14 2 views
1

Допустим, у меня есть массив как это:Trending тему алгоритм в JavaScript

var object = [ 
    {name: "christmas", mentions: 56, last_mention: 12}, 
    {name: "paris", mentions: 92, last_mention: 13}, 
    {name: "halloween", mentions: 64, last_mention: 34}, 
    {name:"easter", mentions: 124, last_mention: 213} 
] 

Где last_mention это количество дней назад, что было отмечено в прошлом.

Я хочу заказать объект, чтобы сначала отображались тенденции. Например, история Парижа сейчас имеет тенденцию, поэтому она должна быть наверху, хотя она не самая последняя. Пасха должна быть внизу, поскольку это старые новости. Есть ли в JavaScript алгоритм, который я могу использовать для этого?

Мой Окончательное решение

var a = 4; 
var b = 1; 
object.sort(function(c, n){ 
    return (a * c.last_mention + b * c.mentions) > (a * n.last_mention + b * n.mentions); 
}); 

Благодаря @crl из чата.

+0

Нет алгоритм [сортировки данных внутри объекта] (http://stackoverflow.com/q/31817351/2564301). – usr2564301

+0

@Jongware: Это уже не так. Начиная с ES2015 (иначе ES6), свойства объекта имеют порядок. Разумеется, для сортировки свойств объекта вам нужно создать * новый * объект (благодаря IE). Не то, чтобы это было правильным решением для этого * этого *. :-) –

+0

Ah - одна из основ абстрактного «объекта» (как «контейнер произвольной информации») была подорвана народным спросом ... Тем не менее самым простым способом было бы бросить все в массив, поскольку это гораздо более логичный способ хранения этого набора данных. – usr2564301

ответ

2

вы можете использовать свои собственные методы сортировки

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

function mentions(a,b){ 
    if(a.mentions === b.mentions) 
    return a.last_mention - b.last_mention; 
    return false; 
} 

var trendings= [ 
    {name: "christmas", mentions: 56, last_mention: 12}, 
    {name: "paris", mentions: 92, last_mention: 13}, 
    {name: "halloween", mentions: 64, last_mention: 34}, 
    {name:"easter", mentions: 124, last_mention: 213} 
]; 

trendings.sort(last_mention); 
trendings.sort(mentions); 

вы можете проверить Yous из положить

console.log(trendings); 
Смежные вопросы