院卒新人サラリーマンのメモ代わり

備忘としてのメモを記載

参照渡しの副作用

javascriptのオブジェクトは参照渡しである。
直接オブジェクトを代入するとまずいんだろうと思ってたけどそんなもんじゃなかった。

function takePlace(arr) {
  arr[1] = 9
  return arr
}

let arr = [1,2,3]
let arr2 = takePlace(arr)

console.log(arr);  // [1,9,3] こっちも変更されちゃう
console.log(arr2);// [1,9,3]

配列を渡してそのままいじってしまうと元の方まで変わってしまう。
mapとかを使えば元の方を変えずに変更した配列を返せる。
これが関数型プログラミングでいう副作用がない状態か!

//シャッフルする関数 本当はmapとかで書きたかったけど後ろからmapがわかんなかった
    function shuffle(targetArr) {
      let arr = [...targetArr]
      for (let i = arr.length - 1; i >= 0; i--) {
        let rand = Math.floor(Math.random() * i + 1)
        ;[arr[i], arr[rand]] = [arr[rand], arr[i]]
      }
      return arr
    }