![](/img/trans.png)
[英]Sum and combine similar object elements in array if condition is met - Javascript
[英]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.