2017-08-09 36 views
0

內部內的對象我有一個JavaScript陣列的如何添加/替換JavaScript數組

const Rooms = [{ 
     name:"Science", 
     students:[ 
      {user:"Tom",emotion:"Happy"}, 
      {user:"Marry",emotion:"Angry"}, 
      {user:"Adam",emotion:"Happy"}] 
    },{ 
     name:"Maths", 
     students:[ 
     {user:"Stewie",emotion:"Angry"}, 
      {user:"Cleavland",emotion:"Angry"}, 
      {user:"Meg",emotion:"Happy"}, 
      {user:"Peter",emotion:"Angry"}, 
      {user:"Chris",emotion:"Happy"}] 
    },{ 
     name:"History", 
     students:[ 
      {user:"Monica",emotion:"Angry"}, 
      {user:"Chandler",emotion:"Happy"}, 
      {user:"Joe",emotion:"Happy"}, 
      {user:"Ross",emotion:"Angry"}] 
    }]; 

形式,我需要找到一個房間的名字,並添加/需要時由學生代替它。這意味着我應該能夠找到房間(數學)並添加/更新學生。如果學生已經在那裏,那麼他的情緒應該改變。

這是我試過的代碼,但它並沒有取代現有的學生。

Rooms.forEach((e)=>{if(e.name === "Science"){ 
    e.students.push({user:"Tom",emotion:"Surprised"}); 
}}); 

如何搜索特定的json並更改現有的學生或添加新的學生數據(如果學生不在場)?

+0

你可以用[underscore.js]很容易做到這一點(http://underscorejs.org/) –

+5

@GaurangGhinaiya絕對沒有必要的外部庫。 ES6有足夠的方法可以輕鬆完成此操作。 – Andreas

回答

0

利用學生的陣列中找到:

例如,尋找「湯姆」和更新它:

Rooms.forEach((e)=>{ 
    if(e.name === "Science"){ 
    const tom = e.students.find((student) => student.user === "Tom"); 
    if (!tom)  
     e.students.push({user:"Tom",emotion:"Surprised"}); 
    else 
     tom.emotion = "Surprised"; 
    } 
}); 

注意:您也可以使用查找找到了房間,而不是及如何使用foreach:

const e = Rooms.find((room) => room.name === "Science"); 
if (e) { 
    const tom = e.students.find((student) => student.user === "Tom"); 
    if (!tom)  
    e.students.push({user:"Tom",emotion:"Surprised"}); 
    else 
    tom.emotion = "Surprised"; 
    } 
} 
+0

不想更改原始代碼。 – lilezek