JavaScript配列について知っておくべきこと

reduceを使用して配列を深く平坦化する例

大胆な発言をさせてください:forループはしばしば役に立たず、コードを読みにくくします。配列の繰り返し、要素の検索、並べ替えなど、必要なものについては、おそらく配列メソッドを使用できます。

ただし、それらのいくつかは、有用性にもかかわらず、まだ知られておらず使用されていません。便利な方法を提供することで、あなたのために大変な仕事をします。 JavaScript配列メソッドのガイドとして、この記事を検討してください。

注:始める前に、1つ知っておく必要があります。関数型プログラミングに偏っているからです。そのため、元の配列を直接変更しないメソッドを使用する傾向があります。そうすれば、副作用を回避できます。配列を絶対に変更しないでくださいと言っているわけではありませんが、少なくともいくつかのメソッドがそれを実行し、それが副作用につながる可能性があることを知っています。副作用は不必要な変更につながり、不必要な変更はバグにつながります!

それを知って、始めましょう。

この記事はもともとthomlom.devで公開されました。あなたはそれでウェブ開発に関するより多くの記事を見つけることができます!

必需品

配列を操作する際に知っておくべき4つの事柄があります:map、filter、reduce、spread operator彼らは強力で便利です。

地図

あなたはそれをたくさん使うでしょう。基本的に、配列の要素を変更する必要があるたびに、mapの使用を検討してください。

パラメータを1つ取ります。配列のすべての要素で呼び出される関数です。そして、新しい配列を返すので、ここでは副作用はありません。

const数= [1、2、3、4]
const numbersPlusOne = numbers.map(n => n + 1)console.log(numbersPlusOne)// [2、3、4、5]

オブジェクトの特定のプロパティを1つだけ保持する新しい配列を作成することもできます。

const allActivities = [
  {タイトル:「マイアクティビティ」、座標:[50.123、3.291]}、
  {タイトル:「別のアクティビティ」、座標:[1.238、4.292]}
]
const allCoordinates = allActivities.map(activity => activity.coordinates)
console.log(allCoordinates)// [[50.123、3.291]、[1.238、4.292]]

ですから、配列を変換する必要があるときはいつでも、マップの使用を考えてください。

フィルタ

このメソッドの名前は、ここではかなり明確です。配列をフィルタリングする場合に使用します。

mapと同じように、配列のすべての要素で呼び出される唯一のパラメーターとして関数を取ります。この関数はブール値を返す必要があります:

  • 要素を配列に保持する場合はtrue
  • 保持しない場合はfalse。

その後、保持したい要素を含む光沢のある新しい配列を作成します。

たとえば、配列に奇数のみを保持できます。

const数= [1、2、3、4、5、6]
const oddNumbers = numbers.filter(n => n%2!== 0)console.log(oddNumbers)// [1、3、5]

または、配列内の特定のアイテムを削除するためにも使用できます。

const参加者= [
  {id: 'a3f47'、ユーザー名: 'john'}、
  {id: 'fek28'、ユーザー名: 'mary'}、
  {id: 'n3j44'、ユーザー名: 'sam'}、
]
関数removeParticipant(participants、id){
  Participants.filter(participant => Participant.id!== id)を返します
}
console.log(removeParticipant(participants、 'a3f47'))// [{id: 'fek28'、username: 'mary'}、{id: 'n3j44'、username: 'sam'}];

減らす

私の意見では理解するのが最も難しい方法です。しかし、一度それをマスターすると、どれだけ多くのことができるのか気になります。

基本的に、reduceは値の配列を取得し、それらを1つの値に結合することです。レデューサーであるコールバック関数とオプションの初期値(デフォルトでは配列の最初の項目)の2つのパラメーターを取ります。レデューサー自体は4つのパラメーターを取ります。

  • アキュムレーター:戻り値をレデューサーに蓄積します。
  • 配列の現在の値
  • 現在のインデックス
  • 配列reduceが呼び出されました

ほとんどの場合、最初の2つのパラメーター(アキュムレーターと現在の値)を使用します。

理論的になりすぎないようにしましょう。 reduceの最も一般的な例を次に示します。

const番号= [37、12、28、4、9]
const total = numbers.reduce((total、n)=> total + n)console.log(total)// 90

最初の繰り返しで、合計であるアキュムレータは37の初期値を取ります。戻り値は37 + nであり、nは12、つまり49です。2回目の繰り返しで、アキュムレータは49、戻り値は49 + 28 = 77です。以下同様です。

reduceは非常に強力なので、実際にmapやfilterなどの多くの配列メソッドを作成するために使用できます。

const map =(arr、fn)=> {
  return arr.reduce((mappedArr、element)=> {
    return [... mappedArr、fn(element)]
  }、[])
}
console.log(map([1、2、3、4]、n => n + 1))// [2、3、4、5]
constフィルター=(arr、fn)=> {
  return arr.reduce((filteredArr、element)=> {
    return fn(element)? [... filteredArr、要素]:[... filteredArr]
  }、[])
}
console.log(filter([1、2、3、4、5、6]、n => n%2 === 0))// [1、3、5]

基本的に、アキュムレータである[]の初期値を減らしました。 mapの場合、スプレッド演算子のおかげで結果がアキュムレータの最後に追加される関数を実行しました(すぐに表示されますので、心配しないでください)。フィルターについては、要素に対してフィルター関数を実行したことを除いて、ほぼ同じです。 trueを返す場合、前の配列を返します。それ以外の場合は、配列の最後に要素を追加します。

より高度な例を見てみましょう:配列を深くフラット化します。つまり、[1、2、3、[4、[[[[5、[6、7]]]]、8]]のようなものを[1、 2、3、4、5、6、7、8]。

関数flatDeep(arr){
  return arr.reduce((flattenArray、element)=> {
    Array.isArray(element)を返しますか? [... flattenArray、... flatDeep(element)]:[... flattenArray、element]
  }、[])
}
console.log(flatDeep([1、2、3、[4、[[[5、[6、7]]]]、8]]))// [1、2、3、4、5、6、 7、8]

この例はmapに似ていますが、ここでは再帰を使用します。この記事の範囲外であるため、説明しません。ただし、再帰について詳しく知りたい場合は、この優れたリソースをご覧ください。

スプレッド演算子(ES2015)

同意する、これは方法ではありません。ただし、スプレッド演算子を使用すると、配列を操作するときに多くのことを実現できます。実際、これを使用して、配列の値を別の配列に展開できます。その時点から、配列のコピーを作成したり、複数の配列を連結したりできます。

const番号= [1、2、3]
const numbersCopy = [... numbers]
console.log(numbersCopy)// [1、2、3]
const otherNumbers = [4、5、6]
const numbersConcatenated = [... numbers、... otherNumbers]
console.log(numbersConcatenated)// [1、2、3、4、5、6]

注意:スプレッド演算子は、元の配列の浅いコピーを行います。しかし、shallowはどういう意味ですか?

まあ、浅いコピーは元の要素をできるだけ複製しません。したがって、数値、文字列、またはブール値(プリミティブ型)を含む配列がある場合、問題はありません。値は実際に複製されます。ただし、これはオブジェクトまたは配列と同じではありません。元の値への参照のみがコピーされます!したがって、オブジェクトを含む配列の浅いコピーを作成し、コピーした配列のオブジェクトを変更すると、同じ参照を持つため、元の配列のオブジェクトも変更されます。

const arr = ['foo'、42、{name: 'Thomas'}]
let copy = [... arr]
copy [0] = 'bar'
console.log(arr)//変異なし:["foo"、42、{name: "Thomas"}]
console.log(copy)// ["bar"、42、{name: "Thomas"}]
copy [2] .name = 'Hello'
console.log(arr)// /!\ MUTATION ["foo"、42、{name: "Hello"}]
console.log(copy)// ["bar"、42、{name: "Hello"}]

そのため、1つまたは複数のオブジェクトを含む配列の「実際の」コピーを作成する場合は、cloneDeepなどのlodash関数を使用できます。しかし、あなたはそのようなことをしなければならないとは思わないでください。ここでの目標は、内部で物事がどのように機能するかを認識することです。

知っておきたい

知っておくと便利な、配列内の要素の検索、配列の一部の取得など、いくつかの問題に役立つ他の方法を以下に示します。

含む(ES2016)

何かが配列にあるかどうかを知るためにindexOfを使用したことがありますか?それを正しく行うためのひどい方法は?幸いなことに、それは私たちのために含まれています。 includeにパラメーターを指定すると、要素が存在する場合に配列内を検索します。

const sports = ['football'、 'archery'、 'judo']
const hasFootball = sports.includes( 'football')
console.log(hasFootball)// true

連結する

concatメソッドを使用して、2つ以上の配列をマージできます。

const番号= [1、2、3]
const otherNumbers = [4、5、6]
const numbersConcatenated = numbers.concat(otherNumbers)
console.log(numbersConcatenated)// [1、2、3、4、5、6]
//必要な数の配列をマージできます
関数concatAll(arr、... arrays){
  return arr.concat(... arrays)
}
console.log(concatAll([1、2、3]、[4、5、6]、[7、8、9]、[10、11、12]))// [1、2、3、4、 5、6、7、8、9、10、11、12]

forEach

各配列要素に対して何かを実行したいときはいつでも、forEachを使用します。現在の値、インデックス、配列の3つのパラメーターを受け取るパラメーターとして関数を受け取ります。

const番号= [1、2、3、4、5]
numbers.forEach(console.log)
// 1 0 [1、2、3]
// 2 1 [1、2、3]
// 3 2 [1、2、3]

の指標

指定された要素が配列内で見つかる最初のインデックスを返すために使用されます。 indexOfは、要素が配列内にあるかどうかを確認するためにも広く使用されていました。正直に言うと、今日はあまり使いません。

const sports = ['football'、 'archery'、 'judo']
const judoIndex = sports.indexOf( 'judo')
console.log(judoIndex)// 2

見つける

findメソッドは、filterメソッドに非常に似ています。各配列の要素をテストする関数を提供する必要があります。ただし、findは、テストに合格した要素が見つかるとすぐに要素のテストを停止します。フィルターしません。 filterは、配列に関係なく繰り返し処理されます。

const users = [
  {id: 'af35'、名前: 'john'}、
  {id: '6gbe'、名前: 'mary'}、
  {id: '932j'、名前: 'gary'}、
]
const user = users.find(user => user.id === '6gbe')
console.log(user)// {id: '6gbe'、name: 'mary'}

したがって、必要な場合はフィルターを使用してください。配列全体を適切にフィルター処理します。配列内の一意の要素を検索していることが確実な場合は、findを使用します。

findIndex

要素の代わりに最初に見つかった要素のインデックスを直接返すことを除いて、findメソッドとまったく同じです。

const users = [
  {id: 'af35'、名前: 'john'}、
  {id: '6gbe'、名前: 'mary'}、
  {id: '932j'、名前: 'gary'}、
]
const user = users.findIndex(user => user.id === '6gbe')
console.log(user)// 1

findIndexはindexOfと同じだと思うかもしれません。まあ…正確ではありません。 indexOfの最初のパラメーターはプリミティブ値(ブール、数値、ストリング、null、未定義、またはシンボル)であり、findIndexの最初のパラメーターはコールバック関数です。

したがって、プリミティブ値の配列内の要素のインデックスを検索する必要がある場合、indexOfを使用できます。オブジェクトなどのより複雑な要素がある場合は、findIndexを使用します。

スライス

配列の一部を取得するか、配列をコピーする必要があるときはいつでも、スライスを使用できます。ただし、スプレッド演算子と同様に、sliceはその部分の浅いコピーを返します。

const番号= [1、2、3、4、5]
const copy = numbers.slice()

記事の冒頭で、forループはたいてい役に立たないと言った。削除する方法の例を挙げましょう。

APIから一定量のチャットメッセージを取得し、そのうちの5つだけを表示するとします。以下に2つのアプローチを示します。1つはforループ、もう1つはスライスです。

//それを行う「伝統的な方法」:
//取得するメッセージの数を決定し、forループを使用します
const nbMessages = messages.length <5? messages.length:5
letToToTo = []
for(let i = 0; i 
//「arr」の要素が5つ未満の場合でも、
//スライスは元の配列の浅いコピー全体を返します
const messagesToShow = messages.slice(0、5)

一部

配列の少なくとも1つの要素がテストに合格することをテストする場合は、いくつかを使用できます。マップ、フィルター、または検索と同様に、一部のパラメーターはコールバック関数を唯一のパラメーターとして使用します。少なくとも1つの要素がテストに合格した場合はtrueを返し、そうでない場合はfalseを返します。

たとえば、アクセス許可を処理するときにいくつかを使用できます。

const users = [
  {
    id: 'fe34'、
    許可:['read'、 'write']、
  }、
  {
    id: 'a198'、
    許可:[]、
  }、
  {
    id: '18aa'、
    パーミッション:['delete'、 'read'、 'write']、
  }
]
const hasDeletePermission = users.some(user =>
  user.permissions.includes( 'delete')
)
console.log(hasDeletePermission)// true

毎回

すべての要素が(少なくとも1つではなく)条件を満たしているかどうかをすべてテストすることを除いて、いくつかに似ています。

const users = [
  {
    id: 'fe34'、
    許可:['read'、 'write']、
  }、
  {
    id: 'a198'、
    許可:[]、
  }、
  {
    id: '18aa'、
    パーミッション:['delete'、 'read'、 'write']、
  }
]
const hasAllReadPermission = users.every(user =>
  user.permissions.includes( 'read')
)
console.log(hasAllReadPermission)// false

フラット(ES2019)

これらは、JavaScriptの世界に登場するまったく新しいメソッドです。基本的に、flatはすべてのサブ配列要素を連結して新しい配列を作成します。配列を平坦化する深さを表す1つのパラメーター、数値を受け入れます。

const番号= [1、2、[3、4、[5、[6、7]]、[[[[8]]]]]]
const numbersflattenOnce = numbers.flat()
console.log(numbersflattenOnce)// [1、2、3、4、Array [2]、Array [1]]
//注:Array [2]は、2次元配列であることを意味します
const numbersflattenTwice = numbers.flat(2)
console.log(numbersflattenTwice)// [1、2、3、4、5、Array [2]、Array [1]]
const numbersFlattenInfinity = numbers.flat(Infinity)
console.log(numbersFlattenInfinity)// [1、2、3、4、5、6、7、8]

flatMap(ES2019)

この方法が何をするか推測できますか?名前だけでできると思います。

まず、各要素でマッピング関数を実行します。次に、配列を1回平坦化します。簡単!

const文= [
  「これは文です」、
  「これは別の文です」、
  「元のフレーズが見つかりません」、
]
const allWords = ents.flatMap(sentence => statement.split( ''))
console.log(allWords)// ["This"、 "is"、 "a"、 "sentence"、 "This"、 "is"、 "another"、 "sentence"、 "I"、 "ca n't" 、「find」、「any」、「original」、「phrases」]

この例では、配列内に多数の文があり、すべての単語を取得したいと考えています。 mapを使用してすべての文を単語に分割し、配列をフラット化する代わりに、flatMapを直接使用できます。

flatMapとは何の関係もありませんが、reduce関数を使用して単語数をカウントできます(reduce ofの別のユースケースを示すためです)。

const wordsCount = allWords.reduce((count、word)=> {
  count [word] = count [word]? count [word] + 1:1
  戻り回数
}、{})
console.log(wordsCount)// {これ:2、2:a、1、文:2、1:I:1、「できない」:1、検索:1、任意:1、オリジナル:1、フレーズ:1、}

flatMapはリアクティブプログラミングでもよく使用されます。その例はこちらで確認できます。

参加する

配列の要素に基づいて文字列を作成する必要がある場合は、結合を探しています。指定されたセパレータで区切られた配列のすべての要素を連結することにより、新しい文字列を作成できます。

たとえば、joinを使用して、アクティビティのすべての参加者を一目で表示できます。

const参加者= ['john'、 'mary'、 'gary']
constParticipantFormatted = Participants.join( '、')
console.log(participantsFormatted)// john、mary、gary

参加者を前にフィルタリングして名前を取得することができる、より実際的な単語の例を次に示します。

const potentialParticipants = [
  {id: 'k38i'、名前: 'john'、年齢:17}、
  {id: 'baf3'、名前: 'mary'、年齢:13}、
  {id: 'a111'、名前: 'gary'、年齢:24}、
  {id: 'fx34'、名前: 'emma'、年齢:34}、
]
constParticipantFormatted = potentialParticipants
  .filter(user => user.age> 18)
  .map(user => user.name)
  .join( '、')
console.log(participantsFormatted)//ゲイリー、エマ

から

これは、たとえば文字列のような配列のようなオブジェクトまたは反復可能なオブジェクトから新しい配列を作成する静的メソッドです。 domで作業しているときに便利です。

const nodes = document.querySelectorAll( '。todo-item')//これはNodeListのインスタンスであり、配列メソッドを使用することはできません
const todoItems = Array.from(nodes)//これで、配列の操作中にマップ、フィルターなどを使用できます!

配列インスタンスの代わりに配列を使用したことを見ましたか?そのため、fromは静的メソッドと呼ばれます。

次に、これらのノードを楽しんで、たとえばそれぞれのノードでイベントリスナーをforEachに登録します。

todoItems.forEach(item => {
  item.addEventListener( 'click'、function(){
    alert( `$ {item.innerHTML}`をクリックしました)
  })
})

isArray

ここで、isArrayというArrayの別の静的メソッドについて説明します。驚くことなく、渡された値が配列であるかどうかを示します。

前の例に基づいて、これが得られます:

constノード= document.querySelectorAll( '。todo-item')
console.log(Array.isArray(nodes))// false
const todoItems = Array.from(nodes)
console.log(Array.isArray(todoItems))// true

知っておくと良いが、変化する

他の一般的な配列メソッドを以下に示します。違いは、元の配列を変更することです。配列を変更しても何も問題はありませんが、念頭に置いておくとよいでしょう!

これらすべての方法で、元の配列を変更したくない場合は、事前に浅いコピーまたは深いコピーを作成してください。

const arr = [1、2、3、4、5]
const copy = [... arr] //またはarr.slice()

ソート

はい、並べ替えは元の配列を変更します。実際、配列の要素を適切にソートします。デフォルトのソート方法は、すべての要素をストリングに変換し、アルファベット順にソートします。

const名= ['john'、 'mary'、 'gary'、 'anna']
names.sort()
console.log(names)// ['anna'、 'gary'、 'john'、 'mary']

たとえば、Pythonのバックグラウンドから来た場合は注意してください。numbers配列でソートを実行しても、期待した結果が得られません。

const番号= [23、12、17、187、3、90]
numbers.sort()
console.log(numbers)// [12、17、187、23、3、90]

次に、配列をソートする方法は?さて、sortは1つの関数、比較関数を受け入れます。この関数は、最初の要素(aと呼びます)と比較のための2番目の要素(b)の2つのパラメーターを受け入れます。これらの2つの要素の比較では、数値を返す必要があります。

  • 負の場合、aはbの前にソートされます
  • 正の場合、bはaの前にソートされます
  • 0の場合、変更はありません。

次に、そのように数字を並べ替えることができます。

const番号= [23、12、17、187、3、90]
numbers.sort((a、b)=> a-b)
console.log(numbers)// [3、12、17、23、90、187]

または、日付を最新のもので並べ替えることができます。

const posts = [
  {
    title:'15分以内にDiscordボットを作成します '、
    日付:新しい日付(2018、11、26)、
  }、
  {
    タイトル:「CSSの作成方法を改善する方法」、
    date:new Date(2018、06、17)}、
  {
    タイトル:「JavaScript配列」、
    日付:新しいDate()
  }、
]
posts.sort((a、b)=> a.date-b.date)// 2つの日付を減算すると、それらの差がミリ秒単位で返されます
console.log(投稿)
// [{title: 'CSSの作成方法を改善する方法'、
//日付:2018-07-17T00:00:00.000Z}、
// {title:'15分以内にDiscordボットを作成する '、
//日付:2018-12-26T00:00:00.000Z}、
// {title: '機能的なJavascript配列の学習'、
//日付:2019-03-16T10:31:00.208Z}]

埋める

fillは、開始インデックスから終了インデックスまでの配列のすべての要素を静的な値で変更または入力します。 fillの優れた用途は、新しい配列を静的な値で埋めることです。

//通常、IDとランダムな名前を生成する関数を呼び出しますが、ここではそれを気にしません。
関数fakeUser(){
  return {
    id: 'fe38'、
    名前:「トーマス」、
  }
}
const posts = Array(3).fill(fakeUser())
console.log(posts)// [{id: "fe38"、name: "thomas"}、{id: "fe38"、name: "thomas"}、{id: "fe38"、name: "thomas"} ]

ここでメソッドの名前はかなり明確だと思います。

const番号= [1、2、3、4、5]
numbers.reverse()
console.log(numbers)// [5、4、3、2、1]

ポップ

それは配列から最後の要素を削除して返します。

constメッセージ= ['Hello'、 'Hey'、 'How are you?'、 "I'm fine"]
const lastMessage = messages.pop()
console.log(messages)// ['Hello'、 'Hey'、 'How are you?']
console.log(lastMessage)//元気です

置き換え可能なメソッド

最後に、この最後のセクションでは、元の配列を変更し、他の配列に簡単に置き換えることができるメソッドを見つけます。これらの方法を捨てるべきだと言っているのではありません。一部の配列メソッドには副作用があり、それに代わるものがあることを認識してください

押す

これは、配列を操作するときに広く使用されている方法です。実際、プッシュを使用すると、1つ以上の要素を配列に追加できます。通常、古い配列に基づいて新しい配列を構築するためにも使用されます。

const todoItems = [1、2、3、4、5]
const itemsIncremented = []
for(let i = 0; i 
console.log(itemsIncremented)// [2、3、4、5、6]
const todos = [「記事を書く」、「校正」]
todos.push( '記事を公開')
console.log(todos)// [「記事を書く」、「校正」、「記事を公開する」]

itemsIncrementedのように別の配列に基づいて配列を構築する必要がある場合、可能性としては、親友のマップ、フィルター、またはリデュースなどのメソッドが用意されています。実際、mapを使用して同じことを行うことができます。

const itemsIncremented = todoItems.map(x => x + 1)

そして、新しい要素を追加する必要があるときにプッシュを使用したい場合、スプレッド演算子はあなたの背中を取り戻します:

const todos = ['記事を書く'、 '校正'] console.log([... todos、 '記事を公開する'])

スプライス

スプライスは、特定のインデックスの要素を削除する方法としてよく使用されます。実際にフィルターで同じことができます:

const months = ['January'、 'February'、 'March'、 'April'、 'May']
//スプライス付き
months.splice(2、1)//インデックス2の要素を1つ削除します
console.log(months)// ['January'、 'February'、 'April'、 'May']
//スプライスなし
const monthsFiltered = months.filter((month、i)=> i!== 3)
console.log(monthsFiltered)// ['January'、 'February'、 'April'、 'May']

そして今、あなたはそう思うかもしれませんが、もし私が多くの要素を削除する必要があるなら?さて、スライスを使用してください:

const months = ['January'、 'February'、 'March'、 'April'、 'May']
//スプライス付き
months.splice(1、3)//インデックス1から始まる3つの要素を削除します
console.log(months)// ['January'、 'May']
//スプライスなし
const monthsSliced = [... months.slice(0、1)、... months.slice(4)]
console.log(monthsSliced)// ['January'、 'May']

シフト

shiftは、配列の最初の要素を削除して返します。機能的な方法で行うには、spread / restを使用できます。

const番号= [1、2、3、4、5]
//シフトあり
const firstNumber = numbers.shift()
console.log(firstNumber)// 1
console.log(numbers)// [2、3、4、5]
//シフトなし
const [firstNumber、... numbersWithoutOne] = numbers
console.log(firstNumber)// 1
console.log(numbersWithoutOne)// [2、3、4、5]

シフト解除

Unshiftを使用すると、配列の先頭に1つ以上の要素を追加できます。シフトと同じように、スプレッド演算子を使用してそのようなことを行うことができます。

const番号= [3、4、5]
//シフト解除付き
numbers.unshift(1、2)
console.log(numbers)// [1、2、3、4、5]
//シフトなし
const newNumbers = [1、2、... numbers]
console.log(newNumbers)// [1、2、3、4、5]

TL; DR

  • アレイで操作を実行する必要があるときはいつでも、forループを使用せずに、車輪を再発明しないでください。
  • ほとんどの場合、マップ、フィルター、縮小、およびスプレッド演算子を使用します。これらはすべての開発者にとって不可欠なツールです。
  • slice、some、flatMapなど、知っておくと便利な配列メソッドがたくさんあります。それらを認識し、適切なときに使用してください!
  • 副作用により、不要な変更が生じる可能性があります。どのメソッドが元の配列を変更するかに注意してください。
  • スライスとスプレッド演算子は浅いコピーを作成します。したがって、オブジェクトとサブ配列は同じ参照を共有します。それにも注意してください。
  • 「古い」変異配列メソッドは、新しいものに置き換えることができます。それらをどうするかはあなた次第です。

これで、JavaScript配列について知っておくべきことを理解できました。この記事を楽しんだ場合は、拍手ボタンを押して(wantが必要な場合は最大50回)、共有します。ああ、コメントであなたが考えたことを遠慮なく教えてください!