JavaScriptで連想配列オブジェクトAの中でnum * priceしてvoucherSeqが同一の場合はその値を合計して、その結果を特定key(voucherSeq)の値が一致する連想配列オブジェクトBのtotalPriceに入れたいです。
状態としては以下の通りです。
該当のソースコード
JavaScript
1var A = [ 2 [num: 1,price:10,voucherSeq:1] 3 [num: 10,price:100,voucherSeq:1] 4 [num: 2,price:200,voucherSeq:2] 5 [num: 10,price:100,voucherSeq:2] 6 [num: 5,price:300,voucherSeq:3] 7 [num: 10,price:100,voucherSeq:3] 8 [num: 8,price:400,voucherSeq:3] 9]; 10 11var B = [ 12 [totalPrice:null,voucherSeq:1] 13 [totalPrice:null,voucherSeq:2] 14 [totalPrice:null,voucherSeq:3] 15]; 16 17求めたい結果 18var B = [ 19 [totalPrice:1010,voucherSeq:1] 20 [totalPrice:1400,voucherSeq:2] 21 [totalPrice:5700,voucherSeq:3] 22];
試したこと
voucherSeqが同一の場合のみ計算するということが現状できていません。
ただ、配列の中のすべてのnumとpriceを乗法して合計することはできています。
何かに使えるかわかりませんが、下に記載します。
//リストのkeyを元に該当keyだけで新規配列作成関数 var getValueWithKey = function(searchKey, hash) { var result = [], i = 0, len = 0; if (!searchKey || typeof searchKey !== 'string') return []; if (!hash || typeof hash !== 'object') return []; if (hash[searchKey]) { result.push(hash[searchKey]); } else { for (i = 0, len = hash.length; i < len; i++) { if (hash[i] && hash[i][searchKey]) { result.push(hash[i][searchKey]); } } } return result; }; //下記の場合、配列Aのnumだけでリスト作成 var num = getValueWithKey('num', A); var price = getValueWithKey('price', A); //新規配列作成 const sum =[]; //配列のインデックス番号を元に配列sumに乗算値でプッシュ for (let i = 0; i < num.length; i++) { sum.push(num[i] * price[i]) } //配列sumの合計値を算出 var sumTotalPrice = sum.reduce(function(a,b){ return Number(a) + Number(b); });
回答2件
あなたの回答
tips
プレビュー