配列を絶対 const にする
- カテゴリ:
- JavaScript
- コメント数:
- Comments: 0
◆ 配列を const にしたかったので代入したように配列の中身を置き換えるメソッドをつくった
◆ 中身は変わるので const にしても コピペとかで間違って代入してしまうの防げるくらいのメリットしかないかも
◆ 中身は変わるので const にしても コピペとかで間違って代入してしまうの防げるくらいのメリットしかないかも
最近は基本全部 const で書いてますがときどき let になるものがあります
よくあるのが データを保存してる配列です
データの更新時に新しいのに完全置き換えるので代入できるよう let にする必要があります
特にそれで問題がなかったのですが あるとき その変数以外は全部 const でそれだけ let という状態になりました
こうなるとどうにか const に揃えたい!という気持ちが出てきたので const 化する方法を考えてみました
やりたいことのイメージはこんなのです
方法はこちら
変数 arr への再代入を禁止しても 配列の要素は可変なので いったん配列を空にして新しく置き換えたい配列の中身を追加していきます
splice を使っていったん空にせず一度に置き換えることもできます
代入というよくある操作がこれだと わかりやすさと書きづらさに欠けるのでメソッドを追加しておきます
使うときは
これなら悪くはないと思えるレベルです
よくあるのが データを保存してる配列です
データの更新時に新しいのに完全置き換えるので代入できるよう let にする必要があります
特にそれで問題がなかったのですが あるとき その変数以外は全部 const でそれだけ let という状態になりました
こうなるとどうにか const に揃えたい!という気持ちが出てきたので const 化する方法を考えてみました
やりたいことのイメージはこんなのです
const arr = [10, 100]
function getNewValue(){
return [1, 2, 3]
}
arr = getNewValue()
// error, assign to const
最後の代入が const への代入なのでエラーになりますfunction getNewValue(){
return [1, 2, 3]
}
arr = getNewValue()
// error, assign to const
方法はこちら
const arr = [10, 100]
arr.length = 0
arr.push(...getNewValue())
arr.length = 0
arr.push(...getNewValue())
変数 arr への再代入を禁止しても 配列の要素は可変なので いったん配列を空にして新しく置き換えたい配列の中身を追加していきます
splice を使っていったん空にせず一度に置き換えることもできます
const arr = [10, 100]
arr.splice(0, arr.length, ...getNewValue())
arr.splice(0, arr.length, ...getNewValue())
代入というよくある操作がこれだと わかりやすさと書きづらさに欠けるのでメソッドを追加しておきます
Array.prototype.init = function(arr = []){
this.length = 0
this.push(...arr)
}
this.length = 0
this.push(...arr)
}
使うときは
const arr = [10, 100]
arr.init(getNewValue())
arr.init(getNewValue())
これなら悪くはないと思えるレベルです