前回のおさらい
配列は参照
const array = ['シャミ子', 'もも', 'みかん']; const refArr = array; array.push('シャミ先'); console.log(refArr); // => ['シャミ子', 'もも', 'みかん', 'シャミ先']
空配列を代入して配列を空にする方法だと const
にできない
配列を空にする方法で一般的なのは 空配列 []
を代入してしまうことではないかと思います。
しかしこの方法では再代入しなければならないので、const
定義することができません。
let array = ['シャミ子', 'もも', 'みかん']; const refArr = array; // 配列を空にする array = []; console.log(array); // => [] console.log(refArr); // => ['シャミ子', 'もも', 'みかん'] // 再代入が発生しているので参照が切れ別の配列になっている
Array.length = 0 で配列を空にできる
length
を 0
にすると配列を空にすることができるようです!
const array = ['シャミ子', 'もも', 'みかん']; const refArr = array; array.length = 0; console.log(array); // => [] console.log(refArr); // => [] // 参照が切れないので参照先も空になる
この方法なら再代入がないので const
で元の配列を作成することができます!!
ただ、配列への参照が切れないので、参照している変数があると意図せず内容を変化させてしまう可能性 (副作用) があります。
関数に渡した場合も同様なので注意が必要です。
const arrayEmpty = (array) => { array.length = 0; return array; } const array = ['シャミ子', 'もも', 'みかん']; const refArr = array; arrayEmpty(refArr); console.log(refArr); // => [] console.log(array); // => [] // refArr を空にしたつもりが元の配列も空になってしまう
副作用を発生させないためには配列をコピーして使うのが良さそうです。
[参考]
関数型プログラミングの基礎 JavaScriptを使って学ぶ
- 作者: 立川察理,長瀬嘉秀
- 出版社/メーカー: リックテレコム
- 発売日: 2016/10/29
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
- 作者: 伊藤いづも
- 出版社/メーカー: 芳文社
- 発売日: 2018/10/25
- メディア: コミック
- この商品を含むブログ (2件) を見る