[解決済み】Node.jsでオブジェクトのクローンを作成する
2022-04-20 09:52:17
質問
node.jsでオブジェクトをクローンする最も良い方法は何ですか?
例)こんな事態は避けたい。
var obj1 = {x: 5, y:5};
var obj2 = obj1;
obj2.x = 6;
console.log(obj1.x); // logs 6
オブジェクトには属性として複雑な型が含まれている可能性があり、単純な for(var x in obj1) では解決しません。 再帰的なクローンを自分で書く必要があるのでしょうか、それとも私が見ていない何かが組み込まれているのでしょうか?
解決するには?
可能性1
敷居の低いディープコピー。
var obj2 = JSON.parse(JSON.stringify(obj1));
可能性2(非推奨)
注意 この解決策は、現在、非推奨とマークされている のドキュメントを参照してください。 :
<ブロッククオートutil._extend()メソッドは、Node.jsの内部モジュール以外で使用されることを意図したものではありません。しかし、コミュニティがそれを発見し、使用しました。
これは非推奨であり、新しいコードで使用するべきではありません。JavaScript には Object.assign() によって非常によく似た機能が組み込まれています。
オリジナルの回答です。 :
浅いコピーには、Nodeの組み込みの
util._extend()
関数を使用します。
var extend = require('util')._extend;
var obj1 = {x: 5, y:5};
var obj2 = extend({}, obj1);
obj2.x = 6;
console.log(obj1.x); // still logs 5
Nodeのソースコード
_extend
関数はこの中にあります。
https://github.com/joyent/node/blob/master/lib/util.js
exports._extend = function(origin, add) {
// Don't do anything if add isn't an object
if (!add || typeof add !== 'object') return origin;
var keys = Object.keys(add);
var i = keys.length;
while (i--) {
origin[keys[i]] = add[keys[i]];
}
return origin;
};
関連
-
[解決済み】JavaScriptで相対URLへのリダイレクトを行う
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] JavaScriptのオブジェクトが空であることをテストするにはどうすればよいですか?
-
[解決済み] JavaScriptのオブジェクトにキーが存在するかどうかをチェックする?
-
[解決済み] Node.jsのプログラムにコマンドライン引数を渡すにはどうしたらいいですか?
-
[解決済み] Node.jsを使うタイミングをどう判断するか?
-
[解決済み] Node.jsで終了する方法
-
[解決済み] Node.jsでファイルを書き込む
-
[解決済み] Node.jsアプリケーションをデバッグするにはどうすればよいですか?
-
[解決済み】未定義のオブジェクトプロパティを検出する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】 Uncaught TypeError: data.push is not a function
-
[解決済み】Uncaught ReferenceError: angular is not defined - AngularJSが動作しない。
-
[解決済み】XMLHttpRequestモジュールが定義されていない/見つからない
-
[解決済み】JavaScriptのgetElementByNameが機能しない
-
[解決済み】リソースはドキュメントと解釈されるが、MIMEタイプはapplication/zipで転送される
-
[解決済み】Babel NodeJS ES6: SyntaxError: 予期しないトークンのエクスポート
-
[解決済み】Vueが定義されていない
-
[解決済み】中央値の計算 - javascript
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] Node.jsでUnderscoreモジュールを使用する