Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

รวมจากค่าอาร์เรย์ด้วยคีย์ที่คล้ายกันใน JavaScript


สมมติว่านี่คืออาร์เรย์ที่มีข้อมูลบางส่วนเกี่ยวกับหุ้นที่บริษัทแห่งหนึ่งขายและซื้อในช่วงระยะเวลาหนึ่ง

const ธุรกรรม =[ ['AAPL', 'buy', 100], ['WMT', 'sell', 75], ['MCD', 'buy', 125], ['GOOG', 'sell ', 10], ['AAPL', 'buy', 100], ['AAPL', 'sell', 100], ['AAPL', 'sell', 20], ['DIS', 'buy', 15], ['MCD', 'buy', 10], ['WMT', 'buy', 50], ['MCD', 'sell', 90]];

เราต้องการเขียนฟังก์ชันที่รับข้อมูลนี้และส่งคืนอ็อบเจ็กต์ของอาร์เรย์ที่มีชื่อ asstock คีย์ (เช่น 'AAPL', 'MCD') และค่าเป็นอาร์เรย์ของตัวเลขสองตัว โดยที่องค์ประกอบแรกแสดงถึงการซื้อทั้งหมดและองค์ประกอบที่สอง รวมขาย. ดังนั้นรหัสสำหรับทำสิ่งนี้จะเป็น −

ตัวอย่าง

const ธุรกรรม =[ ['AAPL', 'buy', 100], ['WMT', 'sell', 75], ['MCD', 'buy', 125], ['GOOG', 'sell ', 10], ['AAPL', 'buy', 100], ['AAPL', 'sell', 100], ['AAPL', 'sell', 20], ['DIS', 'buy', 15], ['MCD', 'buy', 10], ['WMT', 'buy', 50], ['MCD', 'sell', 90]];const DigesTransactions =(arr) => { return arr.reduce((acc, val, ind) => { const [stock, type, amount] =val; if(acc[stock]){ const [buy, sell] =acc[stock]; if(type ==='ซื้อ'){ acc[หุ้น] =[ซื้อ+จำนวน, ขาย]; }อื่น{ บัญชี[หุ้น] =[ซื้อ, ขาย+จำนวน]; } }อื่น{ if(type ==='buy'){ acc[stock] =[amount, 0]; }else{ acc[stock] =[0, จำนวน]; } } ส่งคืน acc; }, {});};console.log(digestTransactions(transactions)); 

ผลลัพธ์

ผลลัพธ์ในคอนโซลจะเป็น -

{ AAPL:[ 200, 120 ], WMT:[ 50, 75 ], MCD:[ 135, 90 ], GOOG:[ 0, 10 ], DIS:[ 15, 0]}