回答編集履歴

6

コード修正

2021/11/13 16:41

投稿

fj68
fj68

スコア752

test CHANGED
@@ -80,7 +80,7 @@
80
80
 
81
81
 
82
82
 
83
- const b_checked = update(data, 2);
83
+ const b_checked = update(data, 1);
84
84
 
85
85
 
86
86
 

5

表現を修正

2021/11/13 16:41

投稿

fj68
fj68

スコア752

test CHANGED
@@ -110,7 +110,7 @@
110
110
 
111
111
 
112
112
 
113
- ご質問のコードやデータにタイポと思われる部分が多く、正しく読み取れているか自信が無いので、`parent_id`と`child_id`を指定して更新するパターンと、配列のインデックスを指定して更新するパターンを作ってみました。
113
+ `parent_id`と`child_id`を指定して更新するパターンと、配列のインデックスを指定して更新するパターンを作ってみました。
114
114
 
115
115
 
116
116
 

4

表現を修正

2021/11/13 16:33

投稿

fj68
fj68

スコア752

test CHANGED
@@ -14,7 +14,7 @@
14
14
 
15
15
 
16
16
 
17
- あるオブジェクトの特定の要素を更新する処理はスプレッド構文を使って以下のように書けます。
17
+ あるオブジェクトの特定のプロパティの値を更新する処理はスプレッド構文を使って以下のように書けます。
18
18
 
19
19
 
20
20
 
@@ -22,7 +22,7 @@
22
22
 
23
23
  const updateId = (obj, newId) =>
24
24
 
25
- // スプレッド構文でオブジェクトの中身を展開し、キーが"id"の要素はnewIdにすることで更新する
25
+ // スプレッド構文でオブジェクトの中身を展開し、キーが"id"のプロパティの値はnewIdにすることで更新する
26
26
 
27
27
  ({ ...obj, id: newId });
28
28
 
@@ -38,7 +38,7 @@
38
38
 
39
39
  const update = (obj, key, value) =>
40
40
 
41
- // スプレッド構文でオブジェクトの中身を展開し、キーがkeyの要素はvalueにすることで更新する
41
+ // スプレッド構文でオブジェクトの中身を展開し、キーがkeyのプロパティの値はvalueにすることで更新する
42
42
 
43
43
  ({ ...obj, [key]: value });
44
44
 

3

間違いを修正

2021/11/13 16:27

投稿

fj68
fj68

スコア752

test CHANGED
@@ -14,7 +14,7 @@
14
14
 
15
15
 
16
16
 
17
- あるオブジェクトの特定の要素を更新する処理は以下のように書けます。
17
+ あるオブジェクトの特定の要素を更新する処理はスプレッド構文を使って以下のように書けます。
18
18
 
19
19
 
20
20
 
@@ -22,7 +22,7 @@
22
22
 
23
23
  const updateId = (obj, newId) =>
24
24
 
25
- // スプレッド演算子でオブジェクトの中身を展開し、キーが"id"の要素はnewIdにすることで更新する
25
+ // スプレッド構文でオブジェクトの中身を展開し、キーが"id"の要素はnewIdにすることで更新する
26
26
 
27
27
  ({ ...obj, id: newId });
28
28
 
@@ -38,7 +38,7 @@
38
38
 
39
39
  const update = (obj, key, value) =>
40
40
 
41
- // スプレッド演算子でオブジェクトの中身を展開し、キーがkeyの要素はvalueにすることで更新する
41
+ // スプレッド構文でオブジェクトの中身を展開し、キーがkeyの要素はvalueにすることで更新する
42
42
 
43
43
  ({ ...obj, [key]: value });
44
44
 

2

例を追加

2021/11/13 15:59

投稿

fj68
fj68

スコア752

test CHANGED
@@ -52,7 +52,7 @@
52
52
 
53
53
  ```js
54
54
 
55
- const update = (arr, index, value) =>
55
+ const update = (arr, index, value = true) =>
56
56
 
57
57
  arr.map((item, i) => ({
58
58
 
@@ -62,11 +62,53 @@
62
62
 
63
63
  }));
64
64
 
65
+
66
+
67
+ const data = [{
68
+
69
+ id: "a",
70
+
71
+ checked: false,
72
+
73
+ }, {
74
+
75
+ id: "b",
76
+
77
+ checked: false,
78
+
79
+ }];
80
+
81
+
82
+
83
+ const b_checked = update(data, 2);
84
+
85
+
86
+
87
+ /*
88
+
89
+ b_checked = [{
90
+
91
+ id: "a",
92
+
93
+ checked: false,
94
+
95
+ }, {
96
+
97
+ id: "b",
98
+
99
+ checked: true, // 2番目のオブジェクトのcheckedプロパティが更新される
100
+
101
+ }];
102
+
103
+ */
104
+
65
105
  ```
66
106
 
67
107
 
68
108
 
69
- というわけで、これらを踏まえて考えてみると、こんな感じになるのではないでしょうか。
109
+ というわけで、これらを踏まえて考えてみると、以下のようになるのではないでしょうか。
110
+
111
+
70
112
 
71
113
  ご質問のコードやデータにタイポと思われる部分が多く、正しく読み取れているか自信が無いので、`parent_id`と`child_id`を指定して更新するパターンと、配列のインデックスを指定して更新するパターンを作ってみました。
72
114
 

1

説明を追記

2021/11/13 15:57

投稿

fj68
fj68

スコア752

test CHANGED
@@ -46,7 +46,27 @@
46
46
 
47
47
 
48
48
 
49
+ よって、配列の中の`i`番目のオブジェクトの`checked`プロパティを更新する処理はこう書きます。
50
+
51
+
52
+
53
+ ```js
54
+
55
+ const update = (arr, index, value) =>
56
+
57
+ arr.map((item, i) => ({
58
+
59
+ ...item,
60
+
61
+ checked: (i === index) ? value : item.checked,
62
+
63
+ }));
64
+
65
+ ```
66
+
67
+
68
+
49
- いうわけでこれらをあわせてこんな感じでしょうか。
69
+ というわけでこれらを踏まえて考えてると、こんな感じになるのはないでしょうか。
50
70
 
51
71
  ご質問のコードやデータにタイポと思われる部分が多く、正しく読み取れているか自信が無いので、`parent_id`と`child_id`を指定して更新するパターンと、配列のインデックスを指定して更新するパターンを作ってみました。
52
72
 
@@ -90,7 +110,7 @@
90
110
 
91
111
  ...child,
92
112
 
93
- checked: (parent_index === parentIndex && child.child_index === childIndex) ? value : child.checked,
113
+ checked: (parent_index === parentIndex && child_index === childIndex) ? value : child.checked,
94
114
 
95
115
  })),
96
116