2017-02-28 5 views
1

私はいくつかの同様の質問がある知っているが、それらの非は私の問題で私を助けることができなかった:アップデートJavaScriptのオブジェクト

私はオブジェクトを持っている:

var mapOptions = { 
     legend: { 
      data:[ 
       {name: 'Europe', backgroundColor: 'RGB(228,101,41)'}, 
       {name: 'APAC', backgroundColor: 'RGB(0,71,126)'}, 
       {name: 'MENEAT', backgroundColor: 'RGB(145,0,73)'} 
      ], 
     } 
    } 

このオブジェクトは、このオブジェクトによって更新されなければなりません:更新機能を行うことができるはず何

var newOptions = { 
      legend: { 
      data: [ 
       {name: 'Europe', backgroundColor: 'green'}, 
      ] 
      } 
    } 

  1. 更新属性:'RGB(228,101,41)'から'green'

  2. 必要のない項目を実行します削除します。例えば'Europe'アイテムのみ残る必要があります。今の

私はjQuery extend/deep機能を使用します。

$.extend(true, mapOptions, newOptions); 

それは、部分的に動作します。属性のみが更新されます。

誰でも2番目のポイントを達成するのに手伝ってもらえますか、アイテムを削除/追加する方法はありますか?

また、2つの関数を分割する必要がありますか?

ありがとうございました!

+0

'アップデート属性: 'RGB(228,101,41)' からgreen''すべてのRGB値は英語名を持っていません」に。あなたはその場合何をしたいですか? – mehulmpt

+0

@MehulMohan最初の問題を指摘した。 2番目の問題は、アイテムを削除したいものに基づいていますか?あなたは「ヨーロッパ」を保つだけですか? 「ヨーロッパ」が複数回ある場合はどうなりますか? – Weedoze

+0

1.問題:単なる例です。代わりにRGBを使用します:) –

答えて

1

にアクセスするための表記法は、溶液は、基本的な割り当てのようになります。

mapOptions.legend.data = newOptions.legend.data 
+0

問題は、このオブジェクトに 'data'属性以上の属性があることです。すべての人が基本的な義務を負わなければならないようです。手伝ってくれてありがとう –

1

あなただけの最初valeusあなたはすべてのデータcontenteを変更したい場合は あなたは、あなたはjavascriptのドットを使用することができ、データアレイ

mapOptions.legend.data[0] = {name: 'Europe', backgroundColor: 'green'}; 

内の相対インデックス位置(0)を使用することができますを変更したい場合あなたの例に基づいてオブジェクト要素

mapOptions.legend.data = {name: 'Europe', backgroundColor: 'green'}; 
+1

@RoryMcCrossan回答が完全に変更されました – scaisEdge

0

は、オブジェクトを参照して、ハッシュテーブルを使用して、更新の配列を反復処理でき、更新するために、複数の項目については、この

mapOptions.legend.data = {name: 'Europe', backgroundColor: 'green'}; 
0

を試してみてください。

hashが指定された名前に設定されている場合は更新し、そうでない場合は新しいオブジェクトを配列にプッシュします。

var mapOptions = { legend: { data: [{ name: 'Europe', backgroundColor: 'RGB(228,101,41)' }, { name: 'APAC', backgroundColor: 'RGB(0,71,126)' }, { name: 'MENEAT', backgroundColor: 'RGB(145,0,73)' }], } }, 
 
    newOptions = { legend: { data: [{ name: 'Europe', backgroundColor: 'green' }, ] } }, 
 
    hash = Object.create(null); 
 

 
mapOptions.legend.data.forEach(function (a, i) { 
 
    hash[a.name] = a; 
 
}); 
 

 
newOptions.legend.data.forEach(function (a) { 
 
    if (hash[a.name]) { 
 
     hash[a.name].backgroundColor = a.backgroundColor; 
 
    } else { 
 
     mapOptions.legend.data.push(a); 
 
    } 
 
}); 
 

 
console.log(mapOptions.legend.data);
.as-console-wrapper { max-height: 100% !important; top: 0; }

関連する問題