如何在数组中找到相同的元素及其值的总和

时间:2014-08-11 11:11:20

标签: javascript arrays

我有这个数组:

var type = ["Petrol", "Petrol", "Transport", "Petrol", "Transport", "Personal"];
var price = [100,250,50,25,10,20];

基本上type[0]price[0]是类型及其价格。 Petrol = $ 100。根据数组索引与其他人相同。

我想在数组type中找到重复的元素,然后将它们price添加到日志中。

示例:

type[0]type[3]是重复元素Petrol。所以我想添加他们的值price[0] + [price[3],只要有相同的元素。

  • 记录1:价格[0] +价格[3] =显示汽油总量
  • 日志2: 价格[2] +价格[4] =显示运输总量

我在这里取得了一些进展JSFIDDLE。但它只能使用2个相同的元素,更重要的是,它不会起作用,而且它也很麻烦。

4 个答案:

答案 0 :(得分:3)

这看起来不那么混乱IMO

var result = {};
type.forEach(function(name, i) {
    result[name] = (result[name] || 0) + price[i]
});

console.log(result) // { Petrol: 375, Transport: 60, Personal: 20 }

答案 1 :(得分:2)

使用对象不是更简单吗?使用type数组作为键,并将price的值添加到每个键:
看来,在你的小提琴中,你正在追踪跑步总数,我也在这里补充说:

var total = 0,
    typePrice = {};//creates object
for (var i=0;i<types.length;++i)
{
    if (!typePrice.hasOwnProperty(types[i]))
    {//type not set on object
        typePrice[types[i]] = 0;//set to 0
    }
    typePrice[types[i]] += price[i];
    total += price[i];
}
console.log(typePrice);
//then to list:
var elem = document.querySelector('#foo');
for (var p in typePrice)
{
    if (typePrice.hasOwnProperty(p))
        elem.innerHTML += p + ': ' + typePrice[p] + '<br>';
}

这就是它的全部。

Fiddle demo

答案 2 :(得分:2)

您也可以试试这个。

<span id="op"></span>
var type = ["Petrol", "Petrol", "Transport", "Petrol", "Transport", "Personal"];
var price = [100,250,50,25,10,20];
var str='';

for(var i=0;i<type.length;i++){
    for(j=i+1; j<type.length; j++){
        if(type[j]==type[i]){
            price[i] += price[j];
            price.splice(j,1);
            type.splice(j,1);
        }
    }
}

$.each(type, function(i){
    str += type[i]+':'+price[i]+'  ';
});

$('#op').text(str);

小提琴:http://jsfiddle.net/whe2f4uj/1/

答案 3 :(得分:0)

使用对象属性怎么样?

var type = ["Petrol", "Petrol", "Transport", "Petrol", "Transport", "Personal"];
var price = [100,250,50,25,10,20];

var result = {};
for(var i = 0 ; i < type.length ; i++) {
    var t = type[i];
    if(result[t]) {
        result[t] += price[i];
    } else {
        result[t] = price[i];
    }
}

/*
    result = {
        Petrol   : 375,
        Transport:  60,
        Personal :  20
    }
*/