1. ホーム
  2. javascript

[解決済み] アンダースコアを使用して、オブジェクトの配列をクローンする方法は?

2023-06-29 14:34:58

質問

#!/usr/bin/env node
var _ = require('underscore');
var a = [{f: 1}, {f:5}, {f:10}];
var b = _.clone(a);
b[1].f = 55;
console.log(JSON.stringify(a));

という結果になります。

[{"f":1},{"f":55},{"f":10}]

クローンがうまくいっていないようです ということで、RTFMしてみると、こんな感じ。

http://underscorejs.org/#clone

<ブロッククオート

オブジェクトの浅いコピーされたクローンを作成します。ネストされたオブジェクトや配列は複製ではなく、参照によってコピーされます。

では _.clone はかなり無駄です。 実際にオブジェクトの配列をコピーする方法はあるのでしょうか?

どのように解決するのですか?

さて、トリックがあります! clone がネストしたオブジェクトをクローンしない場合、マップ呼び出しの中で各オブジェクトを明示的にクローンすることによって、強制的にクローンさせることができます! このように。

#!/usr/bin/env node
var _ = require('underscore');
var a = [{f: 1}, {f:5}, {f:10}];
var b = _.map(a, _.clone);       // <----
b[1].f = 55;
console.log(JSON.stringify(a));

印刷します。

[{"f":1},{"f":5},{"f":10}]

やったー a は変更されません! これで b を好きなように編集できるようになりました!