2016-04-07 66 views
0

我有一個與會者陣列,其中2個也是導師。我想通過替換他/她來更新其中一名教員,並將剩餘的參加者保留在陣列中。替換已更改的元素

下面是一個例子:

{ 
     attendees: [ 
     { email: '[email protected]' }, 
     { email: '[email protected]' }, 
     { email: '[email protected]' }, 
     { email: '[email protected]' }, 
     { email: '[email protected]' } 
     ] 
    } 

現在我提交教官的新數組與他們的一個改變:

{ 
     instructors: [ 
     { email : '[email protected]' }, 
     { email : '[email protected]' } 
     ] 
    } 

而我最終的結果應該是:

{ 
     attendees: [ 
     { email: '[email protected]' }, 
     { email: '[email protected]' }, 
     { email: '[email protected]' }, 
     { email: '[email protected]' }, 
     { email: '[email protected]' } 
     ] 
    } 

其中[email protected]已取代[email protected]作爲新教師。我想我可以使用_.differenceBy與lodash,但不知道如何替換數組中的已更改的元素。有沒有一個優雅的方式來做到這一點?

+0

'陣列#CONCAT(陣列)' – Rayon

+2

這並未似乎沒有道理。在原始設置中,知道某事的唯一方法是指導員通過檢查電子郵件。替換之後,無法知道「測試」是一位教練。那是你要的嗎? – Sigfried

+0

沒有意義 –

回答

1

以下是一些解決方案,可以1)將更新放入新變量或2)更新與會者變量。當然,這是相當有限的,因爲你的數據沒有類似於主鍵的東西(例如:ID字段)。如果你有一個主鍵,那麼你可以修改這些例子來檢查ID。

var attendees = [ 
    { email: '[email protected]' }, 
    { email: '[email protected]' }, 
    { email: '[email protected]' }, 
    { email: '[email protected]' }, 
    { email: '[email protected]' } 
] 

var instructors = [ 
    { email : '[email protected]' }, 
    { email : '[email protected]' } 
] 

// 1) in a new variable 
var updatedAttendees = attendees.map(function(item, index) { 
    return instructors[index] || item; 
}) 

// 2) In the same variable 
for (var i = 0; i < attendees.length; i++) { 
    if (instructors[i]) { 
     attendees[i] = instructors[i]; 
    } 
} 

如果你確實有一個主鍵,它可能看起來像這樣。請注意,我們現在有兩個嵌套循環。這個例子是不是在所有優化,但只給你的總體思路:

var attendeesWithId = [ 
    { id: 1, email: '[email protected]' }, 
    { id: 2, email: '[email protected]' }, 
    { id: 3, email: '[email protected]' }, 
    { id: 4, email: '[email protected]' }, 
    { id: 5, email: '[email protected]' } 
] 

var updates = [ 
    { id: 4, email: '[email protected]' }, 
] 

for (var j = 0; j < updates.length; j++) { 
    var update = updates[j]; 

    for (var i = 0; i < attendeesWithId.length; i++) { 
     if (update.id === attendeesWithId[i].id) { 
      attendeesWithId[i] = update; 
     } 
    } 
} 
0

這是否幫助

var initialData = { 
 
     attendees: [ 
 
     { email: '[email protected]' }, 
 
     { email: '[email protected]' }, 
 
     { email: '[email protected]' }, 
 
     { email: '[email protected]' }, 
 
     { email: '[email protected]' } 
 
     ] 
 
    } 
 

 
var updateWithThis = { 
 
     instructors: [ 
 
     { email : '[email protected]' }, 
 
     { email : '[email protected]' } 
 
     ] 
 
    } 
 

 
for(var i=0; i< updateWithThis.instructors.length;i++){ 
 
    initialData.attendees[i] = updateWithThis.instructors[i]; 
 
} 
 

 
document.write(JSON.stringify(initialData));