1. map v/s forEach

map returns modified array, but forEach wont return anything. Also map can be chained with fiter, map & reduce but forEach can't be chanined since it won't return anything.

const arr = [1, 2, 3, 4];

const a = arr.map((num) => num * 2);
console.log(a);
console.log(arr);
// [ 2, 4, 6, 8 ]
// [ 1, 2, 3, 4 ]

const b = arr.forEach((num, i) => {
  arr[i] = num * 2
});
console.log(b);
console.log(arr);
// undefined
// [ 2, 4, 6, 8 ]

2. Return only name of students in uppercase

const STUDENTS = [
  { name: "Arjunan", rollNo: 22, marks: 99 },
  { name: "Ramos", rollNo: 12, marks: 70 },
  { name: "Ronaldo", rollNo: 20, marks: 50 },
  { name: "Messi", rollNo: 1, marks: 50 },
];

const ans = STUDENTS.map((student) => student.name.toUpperCase());
console.log(ans);
// [ 'ARJUNAN', 'RAMOS', 'RONALDO', 'MESSI' ]

3. Return details of students who scored more than 60

const STUDENTS = [
  { name: "Arjunan", rollNo: 22, marks: 99 },
  { name: "Ramos", rollNo: 12, marks: 70 },
  { name: "Ronaldo", rollNo: 20, marks: 50 },
  { name: "Messi", rollNo: 1, marks: 50 },
];

const ans = STUDENTS.filter((student) => student.marks > 60);
console.log(ans);

// Output:
[
  { name: "Arjunan", rollNo: 22, marks: 99 },
  { name: "Ramos", rollNo: 12, marks: 70 },
];

4. Return students whose score > 60 and roll no < 15

const STUDENTS = [
  { name: "Arjunan", rollNo: 22, marks: 99 },
  { name: "Ramos", rollNo: 12, marks: 70 },
  { name: "Ronaldo", rollNo: 20, marks: 50 },
  { name: "Messi", rollNo: 1, marks: 50 },
];

const ans = STUDENTS.filter(
  (student) => student.marks > 60 && student.rollNo < 15
);
console.log(ans);

// Output:
[{ name: "Ramos", rollNo: 12, marks: 70 }];

5. Sum of marks of all Students

const STUDENTS = [
  { name: "Arjunan", rollNo: 22, marks: 99 },
  { name: "Ramos", rollNo: 12, marks: 70 },
  { name: "Ronaldo", rollNo: 20, marks: 50 },
  { name: "Messi", rollNo: 1, marks: 50 },
];

const ans = STUDENTS.reduce((prev, student) => prev + student.marks, 0);
console.log(ans);

// Output:
269;

6. Return name of students whose marks is greater than 60

const STUDENTS = [
  { name: "Arjunan", rollNo: 22, marks: 99 },
  { name: "Ramos", rollNo: 12, marks: 70 },
  { name: "Ronaldo", rollNo: 20, marks: 50 },
  { name: "Messi", rollNo: 1, marks: 50 },
];

const ans = STUDENTS.filter((student) => student.marks > 60).map(
  (student) => student.name
);
console.log(ans);

// Output:
["Arjunan", "Ramos"];

7. Return total marks for students with marks greater than 60 after 20 marks have been added to those who scored less than 60

const STUDENTS = [
  { name: "Arjunan", rollNo: 22, marks: 99 },
  { name: "Ramos", rollNo: 12, marks: 70 },
  { name: "Ronaldo", rollNo: 20, marks: 50 },
  { name: "Messi", rollNo: 1, marks: 40 },
];

const ans = STUDENTS.map((student) => {
  if (student.marks < 60) {
    student.marks = student.marks + 20;
  }
  return student;
})
  .filter((student) => student.marks > 60)
  .reduce((prev, student) => prev + student.marks, 0);

console.log(ans);

// Output:
239;