0

I have added Computer Marks Manually But I have to add ComputerMarks Field through looping to use the given JSON Array which is AnotherSubject To Match The Student Name with JASON Array then Add ComputerMarks field to each student JASON File

let Student1={
    Name:"Mark",
    MathMarks:80,
    EnglishMarks:75,
    ScienceMarks:63,
 }


let Student2={
    Name:"Bob",
    MathMarks:90,
    EnglishMarks:81,
    ScienceMarks:88,
 }


let Student3={
    Name:"Julia",
    MathMarks:88,
    EnglishMarks:87,
    ScienceMarks:89,
 }

let Student4={
    Name:"Anthony",
    MathMarks:60,
    EnglishMarks:64,
    ScienceMarks:61,
 }

 let AnotherSubject=[
 {name:'Mark', ComputersMarks:90},
 {name:'Anthony', ComputersMarks:70},
 {name:'Julia', ComputersMarks:88},
 {name:'Bob', ComputersMarks:81}]

StudentsArray=[Student1,Student2,Student3,Student4]

let StudentMarks={
    students:StudentsArray
}
Student1.ComputersMarks=90
 Student2.ComputersMarks=81
 Student3.ComputersMarks=88
 Student4.ComputersMarks=70
console.log(StudentMarks.students)
Mister Jojo
  • 20,093
  • 6
  • 21
  • 40
parkplug
  • 23
  • 4

2 Answers2

0

a possible way

const
  Student1     = { Name: 'Mark',    MathMarks: 80, EnglishMarks: 75, ScienceMarks: 63 } 
, Student2     = { Name: 'Bob',     MathMarks: 90, EnglishMarks: 81, ScienceMarks: 88 } 
, Student3     = { Name: 'Julia',   MathMarks: 88, EnglishMarks: 87, ScienceMarks: 89 } 
, Student4     = { Name: 'Anthony', MathMarks: 60, EnglishMarks: 64, ScienceMarks: 61 } 
, StudentsList = [ Student1, Student2, Student3, Student4 ] 
, AnotherSubject = 
  [ { Name: 'Mark',    ComputersMarks: 90 } 
  , { Name: 'Anthony', ComputersMarks: 70 } 
  , { Name: 'Julia',   ComputersMarks: 88 } 
  , { Name: 'Bob',     ComputersMarks: 81 }
  ]

function addNewProp ( List, newRefs )
  {
  let [key,prop] = Object.keys( newRefs[0]) 
  List.forEach(el =>
    {
    let newP = newRefs.find(x=>x[key]===el[key] )
    if (newP) el[prop] = newP[prop]
    });
  }

addNewProp(StudentsList, AnotherSubject)

console.log('Student1 ->', JSON.stringify( Student1) )
console.log('Student2 ->', JSON.stringify( Student2) )
console.log('Student3 ->', JSON.stringify( Student3) )
console.log('Student4 ->', JSON.stringify( Student4) )
.as-console-wrapper {max-height: 100%!important;top:0}
Mister Jojo
  • 20,093
  • 6
  • 21
  • 40
0

One easy way to do this would be to use the power of reduce and map.

Reduce basically makes an Object from an Array and Map transforms each item of an array and return the new array.

Additionally, we use the spear syntax ... to manipulate objects.

// Here we are converting [{name: '', marks: 1 }] into { name: marks }
const AnotherSubjectsMap = AnotherSubject.reduce((accu, curr) => ({ 
    ...accu,
    [curr.name]: curr.ComputersMarks
}), {});

let StudentsArray = [Student1, Student2, Student3, Student4]

// Here were are going through the array and adding an extra parameter
StudentsArray = StudentsArray.map(Student => ({ 
    ...Student, // This line means we are copying all keys of Student as it is
    ComputersMarks: AnotherSubjectsMap[Student.Name]
}));

let StudentMarks = {
    students: StudentsArray
}

console.log(StudentMarks.students)

let Student1 = {
  Name: "Mark",
  MathMarks: 80,
  EnglishMarks: 75,
  ScienceMarks: 63,
}


let Student2 = {
  Name: "Bob",
  MathMarks: 90,
  EnglishMarks: 81,
  ScienceMarks: 88,
}


let Student3 = {
  Name: "Julia",
  MathMarks: 88,
  EnglishMarks: 87,
  ScienceMarks: 89,
}

let Student4 = {
  Name: "Anthony",
  MathMarks: 60,
  EnglishMarks: 64,
  ScienceMarks: 61,
}

let AnotherSubject = [{
    name: 'Mark',
    ComputersMarks: 90
  },
  {
    name: 'Anthony',
    ComputersMarks: 70
  },
  {
    name: 'Julia',
    ComputersMarks: 88
  },
  {
    name: 'Bob',
    ComputersMarks: 81
  }
]

AnotherSubjectsMap = AnotherSubject.reduce((accu, curr) => ({
  ...accu,
  [curr.name]: curr.ComputersMarks
}), {});

StudentsArray = [Student1, Student2, Student3, Student4]

StudentsArray = StudentsArray.map(Student => ({
  ...Student,
  ComputersMarks: AnotherSubjectsMap[Student.Name]
}));

let StudentMarks = {
  students: StudentsArray
}

console.log(StudentMarks.students)
Nisanth Reddy
  • 5,967
  • 1
  • 11
  • 29