计算唯一值及其关联计数和值总数

counting unique values with it's associated count and total number of values

这可能很简单,但我现在很震惊。我有一个数组

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

它的值与它各自的值一样

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

现在,任务是添加 item_name 及其各自的总大小和出现次数:

shelter for 11 people,
tent for 12 people,
9 people injured,
15 people displaced

我尝试了一些循环和条件,但我现在累了。提前谢谢你的帮助。

如果你想这样做,你可以使用 $.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);

这里我们在项目中循环并放入地图,如果我们已经有了值,我们将新值添加到旧值。 希望对你有帮助。

您可以像这样创建一个对象:

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');

你可以这样做

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)

演示:Fiddle