簡體   English   中英

如果滿足條件,一個數組中特定字段的總和

[英]Sum of specific field in one array if condition is met

我有兩個 arrays。如果course_id在 arr1 中相同以及 course_id 與 arr2 的 id 字段匹配,我想獲得time_spent字段的總和

let arr1 = [
  { instructor_id: 7, course_id: 19, lesson_id: 1, time_spent: 0 },
  { instructor_id: 7, course_id: 19, lesson_id: 2, time_spent: 0 },
  { instructor_id: 7, course_id: 19, lesson_id: 3, time_spent: 0 },
  { instructor_id: 7, course_id: 20, lesson_id: 4, time_spent: 80 },
  { instructor_id: 7, course_id: 20, lesson_id: 5, time_spent: 40 },
  { instructor_id: 8, course_id: 21, lesson_id: 6, time_spent: 0 },
];

let arr2 = [
  { id: 19, title: "Course 19", duration: 180 },
  { id: 20, title: "Course 20", duration: 120 },
];

// expected result
newArr = [
  { instructor_id: 7, course_id: 19, time_spent: 0 },
  { instructor_id: 7, course_id: 20, time_spent: 120 },
];

有很多方法可以做到這一點,雖然您沒有完全指定所有字段應該發生什么,但有一種直接的方法可以使用Array reduce來執行選擇性求和

作為一個聰明的捷徑,您可以將一個值乘以 boolean 以通過為不匹配的項目添加 0 來僅對匹配的值求和。 condition * value相當於三元condition? value: 0 condition? value: 0

 const arr1 = [ { instructor_id: 7, course_id: 19, lesson_id: 1, time_spent: 0 }, { instructor_id: 7, course_id: 19, lesson_id: 2, time_spent: 0 }, { instructor_id: 7, course_id: 19, lesson_id: 3, time_spent: 0 }, { instructor_id: 7, course_id: 20, lesson_id: 4, time_spent: 80 }, { instructor_id: 7, course_id: 20, lesson_id: 5, time_spent: 40 }, { instructor_id: 8, course_id: 21, lesson_id: 6, time_spent: 0 }, ]; const arr2 = [ { id: 19, title: "Course 19", duration: 180 }, { id: 20, title: "Course 20", duration: 120 }, ]; const result = arr2.map(({ id }) => ({ course_id: id, time_spent: arr1.reduce( (prev, cur, index) => prev + (cur.course_id == id) * cur.time_spent, 0) })); console.log(result);

暫無
暫無

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

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