まず質問文のコードはblというキーが初期化の必要性のあり/なしであり、
後からfalseのキーに向かってfalseを代入しているので無駄だとおもいます。
なので、trueの場合だけfalseを上書き代入するように組んでいます。
(そもそもblキーが存在しないケースとかも想定内なんでしょうか?)
分割代入は後勝ちなのでこれでOK
JavaScript
1const start = {data_1: '', data_2: '', bl: false};
2const array = [
3 {id : "id_1", data_1 : "aaaa", data_2 : "AAAA", bl : false},
4 {id : "id_2", data_1 : "bbbb", data_2 : "BBBB", bl : false},
5 {id : "id_3", data_1 : "cccc", data_2 : "CCCC", bl : true},
6 {id : "id_4", data_1 : "dddd", data_2 : "DDDD", bl : false}
7].map(it => it.bl ? {...it, ...start} : it);
8
9console.log(array);
10// 0: {id: "id_1", data_1: "aaaa", data_2: "AAAA", bl: false}
11// 1: {id: "id_2", data_1: "bbbb", data_2: "BBBB", bl: false}
12// 2: {id: "id_3", data_1: "", data_2: "", bl: false}
13// 3: {id: "id_4", data_1: "dddd", data_2: "DDDD", bl: false}
宣言と同時にmapで変更してしまえば副作用もへったくれもないのでオススメです。
一度なにかの変数を通過する想定であれば、{...it}
を使ってシャローコピーで副作用を緩和すると良いでしょう。
一応、値の更新が目的です
配列は色々とメソッドを所持していますが、mapは配列の複製、forEachは処理の実行を明示するものなので、
今回のケースではforEachを使うべきでしょう。
JavaScript
1let ary = [
2 {id : "id_1", data_1 : "aaaa", data_2 : "AAAA", bl : false},
3 {id : "id_2", data_1 : "bbbb", data_2 : "BBBB", bl : false},
4 {id : "id_3", data_1 : "cccc", data_2 : "CCCC", bl : true},
5 {id : "id_4", data_1 : "dddd", data_2 : "DDDD", bl : false}
6];
7ary.forEach(it => {
8 if (!it.bl) return; // ガード節で逃げればcontinueの代わりになる
9 it.data_1 = '';
10 it.data_2 = '';
11 it.bl = false;
12});
13
14console.log(ary);
15// 0: {id: "id_1", data_1: "aaaa", data_2: "AAAA", bl: false}
16// 1: {id: "id_2", data_1: "bbbb", data_2: "BBBB", bl: false}
17// 2: {id: "id_3", data_1: "", data_2: "", bl: false}
18// 3: {id: "id_4", data_1: "dddd", data_2: "DDDD", bl: false}
ループ文を使いたければ、for...ofを使いましょう。
これが最速かつ自然な書き方だと思うので、変にこねくり回しても良くはならないと思います。
JavaScript
1let ary = [
2 {id : "id_1", data_1 : "aaaa", data_2 : "AAAA", bl : false},
3 {id : "id_2", data_1 : "bbbb", data_2 : "BBBB", bl : false},
4 {id : "id_3", data_1 : "cccc", data_2 : "CCCC", bl : true},
5 {id : "id_4", data_1 : "dddd", data_2 : "DDDD", bl : false}
6];
7for (let it of ary) {
8 if (!it.bl) continue; // 同じくガード節でcontinue
9 it.data_1 = '';
10 it.data_2 = '';
11 it.bl = false;
12}
13
14console.log(ary);
15// 0: {id: "id_1", data_1: "aaaa", data_2: "AAAA", bl: false}
16// 1: {id: "id_2", data_1: "bbbb", data_2: "BBBB", bl: false}
17// 2: {id: "id_3", data_1: "", data_2: "", bl: false}
18// 3: {id: "id_4", data_1: "dddd", data_2: "DDDD", bl: false}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/12/17 10:44
2018/12/17 10:44