を参照してくださいコード:
注:それはあなたがすでにしばらくして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
オブジェクトです。
私はちょっと混乱しています。多分私は質問を得ていません。あなたのコードに基づいて 'sub_array'はオブジェクトであり、' main_array'は何かを含むと思う空の配列ですか?メインアレイの外観はどうですか? –
main_arrayは単なるコンテナなので、 sub_arrayのすべてのデータがそこに転送されます。 – KennethC
デフォルトでは、main_arrayは単なるコンテナなので、値を持たないでください。ユーザーがフォームに入力した後、すべてのユーザー入力がsub_arrayに格納され、main_arrayに連結されます – KennethC