2015-05-11 4 views
0

Это может быть просто, но я поражен. У меня есть массивподсчет уникальных значений с учетом их количества и общего количества значений

items=["shelter","tent","shelter","injured","displaced","displaced"] 

и это значение с им соответствующим значением как

magnitude = [5,12,6,9,13,2] 

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

приют для 11 человек,
Тент для 12 человек,
9 человек получили ранения,
15 человек, перемещенных

Я пробовал с некоторыми петлями и условиями, но сейчас я устал. Благодарим вас за помощь.

+1

Пожалуйста, по крайней мере, показать нам свои попытки. – Bergi

+0

У меня есть другой вид объекта, поэтому его трудно представить здесь, а также у меня нет репутации для публикации изображения. Подождите, я создам для этого скрипку. – Shuman

+0

Ну, еще сложнее разобраться, в чем проблема ... – Bergi

ответ

0

Вы могли бы начать с создания объекта, как это:

var map = {}; 
for (var i = 0, count = items.length; i < count; i++) { 
    map[items[i]] = (map[items[i]] || 0) + magnitude[i]; 
} 

jsfiddle

Вы можете просмотреть значения, как это:

for (var item in map) { 
    console.log(item + ': ' + map[item]); 
} 

Или просто получить доступ к их по отдельности, как это:

console.log('shelter for ' + map['shelter'] + ' people'); 
console.log('tent for ' + map['tent'] + ' people'); 
console.log(map['injured'] + ' people injured'); 
console.log(map['displaced'] + ' people displaced'); 
+0

На самом деле его повторение, задача состоит в том, чтобы найти уникальные предметы и добавить их. Я думаю, вы понимаете, что я имею в виду, например, приют для 11 человек (здесь 11 пришли, добавив 6 и 5 предметов приюта) – Shuman

+0

@Shuman - Что значит его повторение. Каждый элемент будет находиться в объекте 'map' за один раз, а общая величина равна его значению. –

+0

Вот это дает: приюта для 5 людей палатки для 12 людей приюта для 6 людей ранением на 9 людей перемещенных 13 людей перемещенных для 2 людей но работающие с тысячами пунктов, что нужно сделать, как убежища для 11 человек палатки для 12 человек ... – Shuman

0

Если вы хотите сделать, что вы можете использовать $ .each, как это:

var items=["shelter","tent","shelter","injured","displaced","displaced"] 

var magnitudes = [5,12,6,9,13,2] 

var map = new Map(); 

$.each(items,function(key,value) { 
    console.log(value); 
    var element = map.get(value); 
    if(element == undefined) 
     element = 0; 
    var element = element + magnitudes[key]; 
    map.set(value,element); 
}) 

console.log(map); 

Здесь мы зацикливание в пунктах и ​​положить на карту, если мы имеем настроек уже значение мы добавляем т.е новое значение Старый. Надеюсь, это поможет.

+0

На самом деле, повторяя, задача состоит в том, чтобы найти уникальные предметы и добавить их. Я думаю, вы понимаете, что я имею в виду, например, приют для 11 человек (здесь 11 пришли, добавив 6 и 5 предметов приюта) – Shuman

+0

О, я понимаю плохой ответ, сори. Я редактирую ответ для будущих пользователей. –

0

Вы могли бы сделать что-то вроде

var msgs = { 
    shelter: 'shelter for {count} people', 
    tent: 'tent for {count} people', 
    injured: '{count} people injured', 
    displaced: '{count} people displaced' 
}; 

tems = ["shelter", "tent", "shelter", "injured", "displaced", "displaced"]; 

magnitude = [5, 12, 6, 9, 13, 2]; 

var tmp = {}; 

for (var i = 0; i < tems.length; i++) { 
    tmp[tems[i]] = (tmp[tems[i]] || 0) + 1; 
} 
var array = []; 
for (var key in tmp) { 
    array.push(msgs[key].replace('{count}', tmp[key])) 
} 
console.log(array) 

Demo: Fiddle

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