1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Javascript 配列の破壊的メソッドと非破壊的メソッドに注意して配列操作を行う

Last updated at Posted at 2022-03-24

配列の破壊的メソッドと非破壊的メソッドとは

非破壊的

元の配列を変更する

メリット

一つの配列を操作するためメモリの消費を抑えれる

デメリット

元の配列を変化させるため使いすぎたり、複雑な場合はバグの温床になりやすい


破壊的

元の配列を変更しない

メリット

元の配列を操作しないため安全なコードを書ける

デメリット

配列を新たに作り出してしまうため、大規模な配列操作に対してはメモリを大量に使う


実際のCodeを使った例

1.破壊的メソッド push

const arrayA = ['', '', '', '', '']
//破壊的メソッド arr.push([element1[, ...[, elementN]]])
arrayA.push('')
console.log(arrayA)

// [LOG]: ["あ", "い", "う", "え", "お", "か"] 
2.非破壊的メソッド concat

const arrayB = ['', '', '', '', '']

//非破壊的メソッド const new_array = old_array.concat([value1[, value2[, ...[, valueN]]]])
const newArrayB = arrayB.concat('')
console.log(arrayB)
console.log(newArrayB)

//元の配列B [LOG]: ["あ", "い", "う", "え", "お"] 
//新しい配列B [LOG]: ["あ", "い", "う", "え", "お", "か"] 

その他の破壊的・非破壊的メソッド一覧

使い分け

大規模な配列(1000件とか1万件とかを超えるような配列操作以外は基本的には元の配列を使用する場合以外は破壊的メソッドはバグの温床になりやすいため避ける

破壊的メソッドを非破壊的に使う方法

spred構文を使用してcopyを作る

const arrayC = ["", "", "", "", ""] 
// Copyを作る(注意: 代入するは意味がない)
const copyC = [...arrayC]
copyC.push('')

console.log(arrayC)
console.log(copyC)

//元の配列C [LOG]: ["あ", "い", "う", "え", "お"] 
//copy配列C [LOG]: ["あ", "い", "う", "え", "お", "か"] 

結論

大規模な配列(1000件とか1万件とかを超えるような配列操作以外は基本的には元の配列を使用する場合以外は破壊的メソッドはバグの温床になりやすいため避ける
しかし、破壊的メソッドには便利なものが用意されていることが多い(sort, reverse)ので、非破壊的メソッドで代用が難しい場合はspred構文を利用しcopyを作り破壊的メソッドを利用するのが良さそう

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?