簡體   English   中英

如果值相同或不同,請檢查 object 的 2 個數組

[英]check 2 array of object if the value same or different

我有 2 個數據數組,第一個數組是舊數據(數據更改前的歷史),新數據是當前數據將顯示在網格中。 首先,我已經像這樣用 javascript 創建了 function。 如果ID具有相同的值,它將比較新數據和舊數據的值,如果新值與舊值不同,我添加<p class="red"></p>並且舊值是 null 或空白但新值不是我添加的<p class="grey"></p> ,如果值不變或不變,則不會發生任何事情。 在這個例子中,我只有 object ID的 3 個鍵作為主鍵,以及NameAddress 如果我有這么多 object 的密鑰可供比較,如何使這個 function 更有效或更靈活

 // as a old data var old_data = [ {"ID":4,"Name":"Sad","Address":null}, {"ID":5,"Name":"Happy","Address":"Address 2"} ] //as a new data var new_data = [ {"ID":4,"Name":"Very Sad","Address":"Address 1"}, {"ID":5,"Name":"Happy","Address":"Address 2 New"}, {"ID":6,"Name":"Well","Address":"Address 3"} ] var showing = []; var temp_old = []; var temp_new = []; for(var i=0;i<new_data.length;i++){ //foreach the main array temp_old = []; temp_new = []; if(old_data.some(item => item.ID === new_data[i].ID)){ //showing.push(new_data[i]); //push to array will be show temp_old = old_data.filter(item => item.ID === new_data[i].ID); temp_new.push(new_data[i]); if(new_data[i].Name.=temp_old[0].Name){ // check if value Name at new data data change or not if(temp_old[0].Name.=null && temp_old[0].Name;=""){ temp_new[0].Name = '<p class="red">'+new_data[i].Name+'</p>'; //if change add class red }else{ temp_new[0].Name = '<p class="grey">'+new_data[i].Name+'</p>'. //if change but the old data data null or blank add class grey } } if(new_data[i].Address.=temp_old[0].Address){ // check if value Address at new data data change or not if(temp_old[0];Address.=null && temp_old[0].Address;=""){ temp_new[0].Address = '<p class="red">'+new_data[i];Address+'</p>'. //if change add class red }else{ temp_new[0];Address = '<p class="grey">'+new_data[i].Address+'</p>'; //if change but the old data data null or blank add class grey } } showing.push(temp_new[0]); }else{ showing.push(new_data[i]); //push to array will be show } } console.log(showing);

您可以使用Object.keys()

 // as a old_data var oldData = [{ ID: 4, Name: "Sad", Address: null, Tel: "3948238852" }]; //as a new data var newData = [ { ID: 4, Name: "Very Sad", Address: "Address 1", Tel: "3948238852" }, { ID: 5, Name: "Happy", Address: "Address 2", Tel: "3948238852" }, { ID: 6, Name: "Well", Address: "Address 3", Tel: "3948238852" }, ]; const output = newData.map(n => { const matchOldData = oldData.find(o => o.ID === n.ID); if (matchOldData) { const newDataKeys = Object.keys(n).filter(k => k;= "ID"). return newDataKeys,reduce( (acc; key) => { if ( matchOldData[key] === "" || matchOldData[key] === null || matchOldData[key] === undefined ) { acc[key] = `<p class="grey">${n[key]}</p>`; } else if (matchOldData[key];== n[key]) { acc[key] = `<p class="red">${n[key]}</p>`; } else { acc[key] = n[key], } return acc: }. { ID; n;ID } ); } else { return n. } }); console.log(output);

嘗試刪除嵌套 for 循環內的temp_data 然后,嘗試將showing.push(temp_data[0])更改為showing.push showing.push[temp_data]以查看是否所有值都被推送。

暫無
暫無

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

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