2016-10-25 9 views
2

私はプローブと呼ばれるオブジェクトを持っています。それは配列であるセンサーと呼ばれるプロパティを持っています。別の配列からオブジェクトの配列を更新するJavaScriptの方法は何ですか?

var probe = { 
    sensors = [ 
     { id: 1, checked: false }, 
     { id: 2, checked: true }, 
     { id: 3, checked: false }, 
     ... //more sensors 
    ], 
    ... //other properties 
} 

私は以下のようなセンサーの更新されたリストを持つ別の配列を持っています。

var updatedSensors = [ 
    { id: 1, checked: true }, 
    { id: 3, checked: true } 
]; 

プローブオブジェクト内のセンサー配列をupdatedSensorsの値から更新したいとします。どうすればいい?

これは、2つのfor-loopsを使用することで簡単に達成できます。しかし、for-loopsはJavaScriptでの反復処理には適していないので、これをどのように行うのが望ましいかと思いました。

編集:updatedSensorsで

オブジェクトはprobe.sensors内のオブジェクトのサブセットです。言い換えれば、updatedSensorsはprobe.sensorsにあるすべてのオブジェクト(ids)を持っているわけではありませんが、probe.sensorsはupdatedSensorsにあるすべてのオブジェクト(ids)を持っています。

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

+1

はユニーク 'id'sていますか?もしそうなら、私はいくつかのループを保存するために 'id'->' checked'のハッシュに配列の1つを翻訳します – CodingWithSpike

+1

'sensors = {1:false、2:true、3:false}'ならば['Object.assign'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)を使用してください。 – 4castle

+0

@ 4castle はい、うまくいきましたが、配列内のセンサーobjsには他のプロパティもあります。 idとcheckedは2つのプロパティのみです。 –

答えて

1

は、このコードのビットを試してみてください:

probe.sensors.map(function (sensor) { 
    // Loop through updated sensors & match sensor.id so we can reassign val 
    updatedSensors.map(function (f) { 
      if (f.id == sensor.id) { 
       sensor.checked = f.checked 
      } 
    }) 
    return sensor; 
}) 
+1

遅すぎます。 [IDでインデックスを作成すると、より良いことができます](http://stackoverflow.com/a/30335130/1529630)。そして 'map'を使うべきではありません。 – Oriol

+0

真。私はインスペクタ@Oriolでそれを書きました – James111

+0

これはupdatedSensorsのobjsを使ってprobe.sensorsのセンサーobjを上書きしませんか?私はそれを望んでいない。私はちょうどprobe.sensorsの各objのcheckedプロパティを更新したいと思います。 –

関連する問題