2015-05-10 4 views
0

У меня есть два массива, оба объекта.Сортировка массива объектов с использованием значений из другого массива

Благотворительные (неупорядоченные):

[{ 
    "_id": "5527c2b29a4c7ebe2953129d", 
    "name": "Lorem ipsum", 
    "number": 1, 
    "metric": "Lorem ipsum", 
    "metricConversion": 6, 
    "logo": "http://api.fake.net/example.png", 
    "country": "Albania", 
    "twitter": "exampletwitter", 
    "facebook": "examplefb" 
}, ...] 

Сниженные:

[{ 
    "type": 1, 
    "charity": "5527c2b29a4c7ebe2953129d", 
    "start": Sun May 10 2015 14:11:32 GMT+0100 (BST), 
    "end": Thu Jul 02 2009 00:00:00 GMT+0100 (BST), 
    "priority": 10 
}, ...] 

Массив акции заказана приоритетом (наибольший первый).

То, что я пытаюсь сделать, это заказать массив благотворительных услуг по массиву рекламных акций, поэтому сначала назначается благотворительность с наивысшим значением для приоритета и т. Д. (С соединением _id - charity).

Я могу придумать несколько простых способов сделать это, однако те, которые приходят на ум, очень неэффективны. Какие-либо предложения?

ответ

2

Создайте карту с благотворительным идентификатором в качестве ключа и индекса (или приоритета) в качестве значения:

var map = {}; 
for (var i = 0; i < promotions.length; i++) { 
    map[promotions[i].charity] = i; 
} 

Теперь вы можете сортировать благотворительные и использовать карту, чтобы определить их порядок:

charities.sort(function(a, b){ 
    return map[a._id] - map[b._id]; 
}); 
+0

'map [a._id] - map [b._id]' возвращает 'NaN', если нет поощрения для одной из благотворительных организаций (предположительно, поскольку' map [..] 'undefined) –

+0

@BenedictLewis: Да, это верно. Я предположил, что были акции для всех благотворительных организаций. Если этого не происходит, вам нужно решить, как вы хотите сортировать благотворительные организации, у которых нет благотворительности. – Guffa

Смежные вопросы