簡體   English   中英

我如何在數組中找到相同的元素及其值的總和

[英]How do I find same element in an array and sum of their values

我有這個數組:

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

基本上, type[0]price[0]是type及其價格。 Petrol = $ 100 根據其他人的數組索引與其他人相同。

我想在數組type查找重復的元素並添加其price然后顯示到日志中。

范例:

type[0]type[3]是重復元素,即Petrol 因此,我想添加它們的值price[0] + [price[3] ,只要存在相同的元素。

  • 日志1:價格[0] +價格[3] =顯示汽油總數
  • 日志2:價格[2] +價格[4] =顯示運輸總額

我在這里JSFIDDLE取得了一些進展。 但是它只能與2個相同的元素一起使用,更多的是,它將不起作用,並且幾乎沒有混亂。

IMO看起來不那么混亂

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

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

為此使用對象會更簡單嗎? 使用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>';
}

這就是全部。

小提琴演示

您也可以嘗試一下。

<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/

使用對象屬性呢?

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
    }
*/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM