私はd3をインタラクティブネットワークアプリケーションに使用します。私がバインドする必要があるデータは、インタラクション中に変更され、JSON変数から選択されたいくつかのオブジェクトで構成されます。
私はJSON変数にマップを使用し、適切なオブジェクトを選択するためのクエリをいくつか行いました。オブジェクトはリストにプッシュされ、このリストは新しいデータとしてバインドされます。
私の問題は、Javascriptがオブジェクトを参照としてプッシュすることです。 d3では気の利いたデータの変更が行われますが、JSON変数が乱雑になり、クエリが機能しなくなります。
JSON.stringify()
またはjQuery.extend()
などの各オブジェクトをコピーする必要がありますか、またはデータとして渡すオブジェクトの配列からJSON変数を切り離す別のソリューションがありますか?クローンとしてのJavascriptプッシュオブジェクト
答えて
すべてのJSオブジェクトは、参照(オブジェクト、配列、関数など)として渡されます。
var deepCopy = JSON.parse(JSON.stringify(oldObject)) // 1. - more of a hack
var deepCopy = _.cloneDeep(oldObject); // 2. use some predefined methods from jQuery, lodash or any other library
var shallowCopy = Object.assign({}, oldObject) // 1. - preferred (if you support new ES features)
このようにして、特定のオブジェクトの「ディープコピー」を作成すると、リストのデータは変更されません。
'JSON.parse(JSON.stringify(oldObject))'をしないでください。本当にjsonを通ることはハックであり、励まされるべきではありません。 – WouterH
これはもっとハックだと言いました –
また、 'Object.assign'はES6の機能なので、まだ最新のブラウザではサポートされていません。たとえば、Internet Explorerはこの機能をまだサポートしていません。 – LordTribual
- 1. プッシュオブジェクトが動作しない
- 2. プッシュオブジェクトそうにMongoDB
- 3. プッシュオブジェクトを再帰的に
- 4. クローンのJavascript(ES6)において祖先
- 5. javascriptオブジェクトのクローン部分
- 6. クローンで動作するDOM構造とjavaScript計算をクローンする方法は?
- 7. <tr>をクローンし、JavaScript/jQueryでクローンの内容を変更してください
- 8. フォームとクローンのクローニングフォームのクローン化
- 9. javascriptを使ってforeach要素をクローンします
- 10. クローンJavaScriptのオブジェクトの非結合バージョン
- 11. JavaScriptの画像のドラッグ可能なクローン
- 12. Jqueryクローンを入力してクローンの値を削除します
- 13. jQueryクローン - 結果としてクローン化されたコントロールは機能しません
- 14. コンカレントハッシュマップのスナップショットとクローン
- 15. Javascriptを - 割り当て(クローンではない)、その名前
- 16. JavaScriptでIteratorをクローンするには?
- 17. javascriptで文書のクローンが機能しない
- 18. ときクローンjQueryオブジェクトと私はjavascriptオブジェクト内のdiv保存している内容
- 19. クローン化trをクローン化していない
- 20. TortoiseGitはクローンでのみパスワードを尋ねて拒否しますが、コマンドラインではクローンをクローンします
- 21. PHPとし、クローンの代わりに、コンストラクタ
- 22. 新しいラジオチェックのクローンと変更
- 23. jQuery表のクローンをクローン
- 24. Javascriptを使用してテーブルをクローンしました。しかし、いくつかの値は、クローン化の後でもはや機能しません
- 25. subrepo、hgクローンとシンボリックリンク
- 26. jQueryクローンとselect2イベント
- 27. omu.valueinjecterタイプと違って深いクローン
- 28. ブートストラップの選択ピッカーとクローン
- 29. Gitは後続クローンのすべてのブランチをクローンしませんか?
- 30. クローンされた要素をjavascriptで更新しますか?
[* "JavaScriptでオブジェクトを複製する最も効率的な方法は何ですか?"](/ q/122102)をご覧ください。 'stingify()'/'parse()'を使うのはそれほど悪いことではありません。それは理想的ではなく、特別な注意を必要とするいくつかの問題がありますが、おそらく最も速い候補です。 – altocumulus