2016-04-07 15 views
0

私は出席者の配列を持っていますが、そのうち2人はインストラクターです。インストラクターの1人を交換して更新し、残りの出席者をそのままアレイに残したいと思います。配列が変更された要素を置換する

ここでは例です:

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

そして、私の最終的な結果は次のようになります。:

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

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

は今、私はそれらの1とインストラクターの新しい配列が変更提出新しい講師として[email protected][email protected]に置き換えられました。私はlodashで_differenceByを使うことができると思うが、配列内の変更された要素をどのように置き換えるかを理解することはできない。これを行うエレガントな方法はありますか?

+0

'アレイ#1 CONCAT(アレイ)' – Rayon

+2

このdoesnのをい理にかなっているようだ。元のセットでは、インストラクターが何かを知る唯一の方法は、電子メールを調べることです。交換後、「テスト」がインストラクターであることを知る方法はありません。それはあなたが欲しいものですか? – 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]; 
    } 
} 

プライマリキーを持っていた場合は、次のようになります。現在、2つのネストループがあることに注意してください。この例では、すべてで最適化されていないが、ちょうどあなたの一般的なアイデアを与えるために:

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));

関連する問題