iT邦幫忙

0

Jquery 陣列 取值計算

2020-10-24 16:06:151148 瀏覽

https://ithelp.ithome.com.tw/upload/images/20201024/20132078axkCCDU0LZ.jpg

我製作了一個陣列
想要選取所有class="expend"裡的price來計算總額卻不知該如何下手
有嘗試用 map filter這兩個語法來抓取資料 寫迴圈
但卻都失敗 抓到的都是空陣列/images/emoticon/emoticon02.gif

((不好意思 新手請多指教 感謝

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
Han
iT邦研究生 1 級 ‧ 2020-10-24 17:52:11
最佳解答
let sum = money_list.list
    .filter(data => data.class === "expend")
    .reduce((a, b) => a.price + b.price);

試試看這樣吧,先filter class 為 expend 的資料,再用 reduce 將所有 price 加總

ps 以上沒測過,有問題自行微調

filter介紹
reduce介紹

看更多先前的回應...收起先前的回應...
Han iT邦研究生 1 級 ‧ 2020-10-24 17:52:35 檢舉

另外這跟jQuery沒關,單純js而已哦..

Han iT邦研究生 1 級 ‧ 2020-10-24 17:56:04 檢舉

不過如果我誤會你意思,是要抓陣列中的 class 去取元素上的價格,再告知我 /images/emoticon/emoticon56.gif

淺水員 iT邦大師 6 級 ‧ 2020-10-24 22:38:21 檢舉

reduce 是不是要給一下 initialValue 阿?還是留給樓主當功課XD

Han iT邦研究生 1 級 ‧ 2020-10-25 18:46:05 檢舉

沒錯!當功課!((糟糕..我自己也沒什麼在放initialValue...

2
rogeryao
iT邦超人 8 級 ‧ 2020-10-24 20:32:44

Html

<input type="button" value="總計(expend)" onclick="calculate('expend')">
<p id="SumValue_expend"></p>
<input type="button" value="總計(deposit)" onclick="calculate('deposit')">
<p id="SumValue_deposit"></p>
<input type="button" value="總計(total)" onclick="calculate('total')">
<p id="SumValue_total"></p>

Javascript

function calculate(classSelect)
{
  var money_list={};
  money_list.name="收支明細表";
  money_list.time="2020/10";
  money_list.list=[
  {name:"薪水",price:45000,time:"10/5",class:"deposit"},
  {name:"房租",price:7500,time:"10/10",class:"expend"},
  {name:"朋友聚餐",price:890,time:"10/13",class:"expend"},
  {name:"水電費",price:780,time:"10/15",class:"expend"},
  {name:"周年慶(化妝品)",price:15700,time:"10/17",class:"expend"},
  {name:"中秋獎金",price:300,time:"10/25",class:"deposit"}
  ];
  //
  tempTotal=0;
  if (classSelect=='total')
  {
    for (i=0; i<money_list.list.length; i++)
    {
      tempTotal = tempTotal + money_list.list[i].price;
    }  
  }
  else
  {
    for (i=0; i<money_list.list.length; i++)
    {
      if (money_list.list[i].class==classSelect)
      {
        tempTotal = tempTotal + money_list.list[i].price;
      }
    }  
  }
  //
  switch (classSelect) {
  case 'expend':
    document.getElementById("SumValue_expend").innerHTML='金額(expend) : '+tempTotal;
    break;
  case 'deposit':
    document.getElementById("SumValue_deposit").innerHTML='金額(deposit) : '+tempTotal;
    break;
  case 'total':
    document.getElementById("SumValue_total").innerHTML='金額(total) : '+tempTotal;
    break;
  }    
}  

Demo

我要發表回答

立即登入回答