102 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			102 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| 
								 | 
							
								---
							 | 
						||
| 
								 | 
							
								id: 587d7b7c367417b2b2512b19
							 | 
						||
| 
								 | 
							
								title: オブジェクト内でネストされたオブジェクトの変更
							 | 
						||
| 
								 | 
							
								challengeType: 1
							 | 
						||
| 
								 | 
							
								forumTopicId: 301164
							 | 
						||
| 
								 | 
							
								dashedName: modify-an-object-nested-within-an-object
							 | 
						||
| 
								 | 
							
								---
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# --description--
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								今度はもう少し複雑なオブジェクトを見てみましょう。 オブジェクトのプロパティは任意の深さまでネストすることができ、その値は、配列や他のオブジェクトなど、JavaScript でサポートされているあらゆる種類のデータを取ることができます。 以下の例について考えてみましょう。
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```js
							 | 
						||
| 
								 | 
							
								let nestedObject = {
							 | 
						||
| 
								 | 
							
								  id: 28802695164,
							 | 
						||
| 
								 | 
							
								  date: 'December 31, 2016',
							 | 
						||
| 
								 | 
							
								  data: {
							 | 
						||
| 
								 | 
							
								    totalUsers: 99,
							 | 
						||
| 
								 | 
							
								    online: 80,
							 | 
						||
| 
								 | 
							
								    onlineStatus: {
							 | 
						||
| 
								 | 
							
								      active: 67,
							 | 
						||
| 
								 | 
							
								      away: 13,
							 | 
						||
| 
								 | 
							
								      busy: 8
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								`nestedObject` には、`id` (値は数値)、`date` (値は文字列)、`data` (値はネスト構造のオブジェクト) の 3 つのプロパティがあります。 構造はすぐに複雑になりますが、同じ記法を使用して、必要な情報にアクセスすることができます。 ネストされた `onlineStatus` オブジェクトの `busy` プロパティに値 `10` を割り当てるには、 ドット記法を用いてプロパティを参照します。
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```js
							 | 
						||
| 
								 | 
							
								nestedObject.data.onlineStatus.busy = 10;
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# --instructions--
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								オブジェクト `userActivity` を定義しました。このオブジェクトの中には、ネストされた別のオブジェクトが含まれています。 `online` キーの値を `45` に設定してください。
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# --hints--
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								`userActivity` には `id`、`date`、`data` のプロパティが存在する必要があります。
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```js
							 | 
						||
| 
								 | 
							
								assert(
							 | 
						||
| 
								 | 
							
								  'id' in userActivity && 'date' in userActivity && 'data' in userActivity
							 | 
						||
| 
								 | 
							
								);
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								`userActivity` には `data` キーがあり、`totalUsers` と `online` というキーを持つオブジェクトが設定されている必要があります。
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```js
							 | 
						||
| 
								 | 
							
								assert('totalUsers' in userActivity.data && 'online' in userActivity.data);
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								`userActivity` の `data` キー内でネストされた `online` プロパティを、`45` に設定する必要があります。
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```js
							 | 
						||
| 
								 | 
							
								assert(userActivity.data.online === 45);
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								`online` プロパティを、ドット記法またはブラケット記法を使用して設定する必要があります。
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```js
							 | 
						||
| 
								 | 
							
								assert.strictEqual(code.search(/online: 45/), -1);
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# --seed--
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## --seed-contents--
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```js
							 | 
						||
| 
								 | 
							
								let userActivity = {
							 | 
						||
| 
								 | 
							
								  id: 23894201352,
							 | 
						||
| 
								 | 
							
								  date: 'January 1, 2017',
							 | 
						||
| 
								 | 
							
								  data: {
							 | 
						||
| 
								 | 
							
								    totalUsers: 51,
							 | 
						||
| 
								 | 
							
								    online: 42
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Only change code below this line
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Only change code above this line
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								console.log(userActivity);
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# --solutions--
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```js
							 | 
						||
| 
								 | 
							
								let userActivity = {
							 | 
						||
| 
								 | 
							
								  id: 23894201352,
							 | 
						||
| 
								 | 
							
								  date: 'January 1, 2017',
							 | 
						||
| 
								 | 
							
								  data: {
							 | 
						||
| 
								 | 
							
								    totalUsers: 51,
							 | 
						||
| 
								 | 
							
								    online: 42
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								userActivity.data.online = 45;
							 | 
						||
| 
								 | 
							
								```
							 |