2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Immutable.jsの高階関数の引数は参照を持っている

Last updated at Posted at 2016-04-06

最近Immutable.jsを導入してウキウキしていました。特にJavaScriptはオブジェクトが基本的に参照渡しなので、意識していないと変なところで値が変わることがあったので大変価値があるライブラリでした。

ところがオブジェクトの値が変なところで書き換わっていることに気がつきました。

以下のようなケースです。

var objects = [
	{
		id: 1,
		name: 'Jack',
		city: 'New York'
	},
	{
		id: 2,
		name: 'Tom',
		city: 'Berkeley'
	}
];

var modified = Immutable.Seq(objects)
	.map(object => {
		object.name = object.name.toUpperCase();
		return object; 
	}).toArray();

元のオブジェクトは以下のように書き換わります。

[
	{
		id: 1,
		name: 'JACK',
		city: 'New York'
	},
	{
		id: 1,
		name: 'TOM',
		city: 'Berkeley'
	}
]

途中の高階関数で与えられる引数は元の参照を持っていることがわかりました。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?