回答編集履歴

3

冒頭の文を追加

2018/12/17 10:40

投稿

miyabi-sun
miyabi-sun

スコア21158

test CHANGED
@@ -1,3 +1,19 @@
1
+ まず質問文のコードはblというキーが初期化の必要性のあり/なしであり、
2
+
3
+ 後からfalseのキーに向かってfalseを代入しているので無駄だとおもいます。
4
+
5
+ なので、trueの場合だけfalseを上書き代入するように組んでいます。
6
+
7
+
8
+
9
+ (そもそもblキーが存在しないケースとかも想定内なんでしょうか?)
10
+
11
+
12
+
13
+ ---
14
+
15
+
16
+
1
17
  [分割代入](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment)は後勝ちなのでこれでOK
2
18
 
3
19
 

2

値の破壊的更新に対応

2018/12/17 10:40

投稿

miyabi-sun
miyabi-sun

スコア21158

test CHANGED
@@ -37,3 +37,107 @@
37
37
  宣言と同時に[map](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/map)で変更してしまえば副作用もへったくれもないのでオススメです。
38
38
 
39
39
  一度なにかの変数を通過する想定であれば、`{...it}`を使ってシャローコピーで副作用を緩和すると良いでしょう。
40
+
41
+
42
+
43
+ ---
44
+
45
+
46
+
47
+ > 一応、値の更新が目的です
48
+
49
+
50
+
51
+ [配列は色々とメソッドを所持しています](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array)が、mapは配列の複製、forEachは処理の実行を明示するものなので、
52
+
53
+ 今回のケースではforEachを使うべきでしょう。
54
+
55
+
56
+
57
+ ```JavaScript
58
+
59
+ let ary = [
60
+
61
+ {id : "id_1", data_1 : "aaaa", data_2 : "AAAA", bl : false},
62
+
63
+ {id : "id_2", data_1 : "bbbb", data_2 : "BBBB", bl : false},
64
+
65
+ {id : "id_3", data_1 : "cccc", data_2 : "CCCC", bl : true},
66
+
67
+ {id : "id_4", data_1 : "dddd", data_2 : "DDDD", bl : false}
68
+
69
+ ];
70
+
71
+ ary.forEach(it => {
72
+
73
+ if (!it.bl) return; // ガード節で逃げればcontinueの代わりになる
74
+
75
+ it.data_1 = '';
76
+
77
+ it.data_2 = '';
78
+
79
+ it.bl = false;
80
+
81
+ });
82
+
83
+
84
+
85
+ console.log(ary);
86
+
87
+ // 0: {id: "id_1", data_1: "aaaa", data_2: "AAAA", bl: false}
88
+
89
+ // 1: {id: "id_2", data_1: "bbbb", data_2: "BBBB", bl: false}
90
+
91
+ // 2: {id: "id_3", data_1: "", data_2: "", bl: false}
92
+
93
+ // 3: {id: "id_4", data_1: "dddd", data_2: "DDDD", bl: false}
94
+
95
+ ```
96
+
97
+
98
+
99
+ ループ文を使いたければ、[for...of](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/for...of)を使いましょう。
100
+
101
+ これが最速かつ自然な書き方だと思うので、変にこねくり回しても良くはならないと思います。
102
+
103
+
104
+
105
+ ```JavaScript
106
+
107
+ let ary = [
108
+
109
+ {id : "id_1", data_1 : "aaaa", data_2 : "AAAA", bl : false},
110
+
111
+ {id : "id_2", data_1 : "bbbb", data_2 : "BBBB", bl : false},
112
+
113
+ {id : "id_3", data_1 : "cccc", data_2 : "CCCC", bl : true},
114
+
115
+ {id : "id_4", data_1 : "dddd", data_2 : "DDDD", bl : false}
116
+
117
+ ];
118
+
119
+ for (let it of ary) {
120
+
121
+ if (!it.bl) continue; // 同じくガード節でcontinue
122
+
123
+ it.data_1 = '';
124
+
125
+ it.data_2 = '';
126
+
127
+ it.bl = false;
128
+
129
+ }
130
+
131
+
132
+
133
+ console.log(ary);
134
+
135
+ // 0: {id: "id_1", data_1: "aaaa", data_2: "AAAA", bl: false}
136
+
137
+ // 1: {id: "id_2", data_1: "bbbb", data_2: "BBBB", bl: false}
138
+
139
+ // 2: {id: "id_3", data_1: "", data_2: "", bl: false}
140
+
141
+ // 3: {id: "id_4", data_1: "dddd", data_2: "DDDD", bl: false}
142
+
143
+ ```

1

ちょっと解説を修正

2018/12/17 10:32

投稿

miyabi-sun
miyabi-sun

スコア21158

test CHANGED
@@ -34,6 +34,6 @@
34
34
 
35
35
 
36
36
 
37
- 宣言箇所から[map](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/map)でそのま打ち込めば副作用ももないですし、
37
+ 宣言と同時に[map](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/map)で変更してしば副作用もへったくれもないオススメで
38
38
 
39
- 副作用なくなら`{...it}`を使ってシャローコピーで緩和する案もあります
39
+ 一度なにかの変数通過る想定であれば、`{...it}`を使ってシャローコピーで副作用を緩和すると良いでしょう