1

マージ2連想配列にしたい。ユーザーが保存して次のボタンを押すと、連想配列をマージして最新のものを取得し、重複するIDを削除する

その特定の国のすべてのデータを保存する必要があります。 country_idが既に存在する場合は、その値のすべてをユーザーの最新の更新で置き換える必要があります。

window.main_array = []; // all of the data of sub_array will be transferred here. 


// when a user clicks a button 

// fetch all the input 
sub_array = { 
    'country_id':country_id, // <- should be unique 

    'countryorigin':countryorigin,   // <- should be updated 
    'marketingbudget':marketingbudget,  // <- should be updated 
    'distributor':distributor,    // <- should be updated 
    'salesrep':salesrep,      // <- should be updated 
    'commission':commission,     // <- should be updated 
    'retainer':retainer,      // <- should be updated 
    'expense':expense,      // <- should be updated 
    'buy_sell':buy_sell,      // <- should be updated 
    'instore':instore,      // <- should be updated 
    'merchandiser':merchandiser,    // <- should be updated 
    'can_sell':can_sell      // <- should be updated 
}; 

// the main_array should have a unique country_id, and get the replace the old one with the latest if user updates a value for that country 

if(main_array.length <= 0){ 
    // just concat the two arrays if there are no data yet in the main_array 
    main_array = main_array.concat(sub_array); 
}else{ 
    // ??? 
    // should only get the latest input for the selected country' 
    // replace the old data with the new one 
} 

// end of click event 
+0

私はちょっと混乱しています。多分私は質問を得ていません。あなたのコードに基づいて 'sub_array'はオブジェクトであり、' main_array'は何かを含むと思う空の配列ですか?メインアレイの外観はどうですか? –

+0

main_arrayは単なるコンテナなので、 sub_arrayのすべてのデータがそこに転送されます。 – KennethC

+0

デフォルトでは、main_arrayは単なるコンテナなので、値を持たないでください。ユーザーがフォームに入力した後、すべてのユーザー入力がsub_arrayに格納され、main_arrayに連結されます – KennethC

答えて

1

を参照してくださいコード:

注:それはあなたがすでにしばらくしてmain_arrayためのフォームが既に比較するためのいくつかの入力を持って走っている前提で書かれています。

var main_array = [ 
    { 
    'country_id':"country_0", // <- should be unique 

    'countryorigin':"Singapore",   // <- should be updated 
    'marketingbudget':1000,  // <- should be updated 
    'distributor':"lll",    // <- should be updated 
    'salesrep':"tan",      // <- should be updated 
    'commission':"900",     // <- should be updated 
    'retainer':"_helloworld__",      // <- should be updated 
    'expense':99,      // <- should be updated 
    'buy_sell':true,      // <- should be updated 
    'instore':false,      // <- should be updated 
    'merchandiser':"hehe",    // <- should be updated 
    'can_sell':false      // <- should be updated 
    }, 
    { 
    'country_id':"country_1", // <- should be unique 

    'countryorigin':"australia",   // <- should be updated 
    'marketingbudget':1000,  // <- should be updated 
    'distributor':"ddd",    // <- should be updated 
    'salesrep':"smith",      // <- should be updated 
    'commission':"200",     // <- should be updated 
    'retainer':"_helloworld__",      // <- should be updated 
    'expense':50,      // <- should be updated 
    'buy_sell':true,      // <- should be updated 
    'instore':false,      // <- should be updated 
    'merchandiser':"hehe",    // <- should be updated 
    'can_sell':false      // <- should be updated 
    }, 
    { 
    'country_id':"country_2", // <- should be unique 

    'countryorigin':"Malaysia",   // <- should be updated 
    'marketingbudget':600,  // <- should be updated 
    'distributor':"ooo",    // <- should be updated 
    'salesrep':"robot",      // <- should be updated 
    'commission':"9005",     // <- should be updated 
    'retainer':"_ddddd__",      // <- should be updated 
    'expense':990,      // <- should be updated 
    'buy_sell':false,      // <- should be updated 
    'instore':true,      // <- should be updated 
    'merchandiser':"hehe",    // <- should be updated 
    'can_sell':false      // <- should be updated 
    }, 
]; // all of the data of sub_array will be transferred here. 


// when a user clicks a button 

// fetch all the input 
var sub_array = { 
    'country_id':"country_1", // <- should be unique 

    'countryorigin':"australia",   // <- should be updated 
    'marketingbudget':5000,  // <- should be updated 
    'distributor':"xyz",    // <- should be updated 
    'salesrep':"john",      // <- should be updated 
    'commission':"100",     // <- should be updated 
    'retainer':"myer",      // <- should be updated 
    'expense':50,      // <- should be updated 
    'buy_sell':true,      // <- should be updated 
    'instore':true,      // <- should be updated 
    'merchandiser':"haha",    // <- should be updated 
    'can_sell':false      // <- should be updated 
}; 

// the main_array should have a unique country_id, and get the replace the old one with the latest if user updates a value for that country 

if(main_array.length <= 0){ 
    // just concat the two arrays if there are no data yet in the main_array 
    main_array = main_array.concat(sub_array); 
}else{ 
    main_array = main_array.map(function(country) { 
    if (country.country_id === sub_array.country_id) { 
     return sub_array; 
    } 
    return country; 
    }) 
} 

あなたの問題を解決するためのアルゴリズムがある場所なのでelse {}節に特に注意を払うようにしたいかもしれません。

ここではmap APIは何ですか、それはmain_arrayリスト内で定義されたすべての単一オブジェクトを通過します。次に、繰り返しごとにオブジェクトが返されます。

Map APIドキュメントhereを参照してください。

map()メソッドは、この配列のすべての要素に関数 を呼び出した結果で新しい配列を作成します。

だからあなたの問題を解決するために、私は比較演算オブジェクトcountry.country_idを取り、それがsub_array.country_idと同じである場合、それは同じである場合、sub_array(オーバーライド)を返す見るためにストリングの照合を行うだろうそうでない場合は、単に元を返しますcountryオブジェクトです。

+0

ねえ男、ありがとう、それは期待どおりに動作します!驚くばかり。 – KennethC

関連する問題