ホームページ ウェブフロントエンド jsチュートリアル JavaScript 配列メソッドの誤った使用例を 4 つ共有する

JavaScript 配列メソッドの誤った使用例を 4 つ共有する

Sep 12, 2018 pm 06:02 PM

初めて JavaScript を学んだとき、私は深く勉強しておらず、一部の知識しか理解していませんでした。過去の期間に、私がチェックしたすべてのプル リクエストでこれら 4 つの間違いが発生しました。この記事を書いたもう 1 つの理由は、私自身がこうした間違いを犯したからです。正しい使い方を見てみましょう!

1. Array.indexOf を使用せず、Array.includes を使用してください

「配列内の要素を見つけたい場合は、Array.indexOf を使用してください。」 JavaScriptのコースを勉強していたときにこの文を思い出しました。この文は正しいです。確かにこのように使用できます。

MDN ドキュメントによると、「Array.indexOf は、検索されている要素の最初に一致した位置の添字を返します。したがって、後でこのインデックスを使用する必要がある場合は、Array.indexOf が良い解決策です。」ただし、解決したい問題は、配列に要素が含まれているかどうかを調べることです。これは、はい/いいえの質問、つまりブール型を返す真または偽の質問です。したがって、ブール値を返す Array.includes を使用することをお勧めします。

'use strict';
const characters = [
  'ironman',
  'black_widow',
  'hulk',
  'captain_america',
  'hulk',
  'thor',
];
console.log(characters.indexOf('hulk'));
// 2
console.log(characters.indexOf('batman'));
// -1
console.log(characters.includes('hulk'));
// true
console.log(characters.includes('batman'));
// false
ログイン後にコピー

2. Array.filterを使用せず、Array.findを使用してください

Array.filterは、フィルタリング条件を満たす新しい配列を返す非常に便利な関数です。その名前が示すように、フィルタリングに使用されます。

ただし、必要な結果に要素が 1 つしかないことがわかっている場合は、それを使用することはお勧めしません。たとえば、コールバック関数定義で一意の ID を使用してフィルタリングする場合、結果は一意である必要があります。この場合、Array.filter は要素を 1 つだけ含む配列を返します。特定の ID で検索できるため、要素が 1 つしかないことがすでに決定されているため、配列を使用することは意味がありません。

さらに、パフォーマンスの問題についても話しましょう。一致する要素をすべて返すために、Array.filter は配列全体を検索する必要があります。フィルター条件を満たす要素が数百ある場合、返される配列は非常に大きくなることが想像できます。

そのような状況を避けるために、Array.find を使用することをお勧めします。フィルター条件を満たす最初の要素のみを返します。さらに、Array.find は配列全体を検索するのではなく、条件を満たす最初の要素を見つけた後に実行を終了します。

'use strict';
const characters = [
  { id: 1, name: 'ironman' },
  { id: 2, name: 'black_widow' },
  { id: 3, name: 'captain_america' },
  { id: 4, name: 'captain_america' },
];
function getCharacter(name) {
  return character => character.name === name;
}
console.log(characters.filter(getCharacter('captain_america')));
// [
//   { id: 3, name: 'captain_america' },
//   { id: 4, name: 'captain_america' },
// ]
console.log(characters.find(getCharacter('captain_america')));
// { id: 3, name: 'captain_america' }
ログイン後にコピー

3. Array.find を使用せず、Array.some を使用してください

私はこの間違いを何度も犯したことを認めます。その後、とても仲の良い友人が私に MDN のドキュメントを読むように頼み、もっと良い解決策があると言いました。この状況は、先ほど述べた Array.indexOf/Array.includes と非常によく似ています。

前の例では、Array.find がフィルター関数を受け入れ、条件を満たす要素を返すことがわかりました。では、配列に特定の要素が含まれているかどうかを調べたい場合、Array.find が最適な解決策なのでしょうか?ブール値ではなく要素固有の値を返すため、おそらくそうではありません。

Array.some を使用することをお勧めします。これはブール値を返します。

'use strict';
const characters = [
  { id: 1, name: 'ironman', env: 'marvel' },
  { id: 2, name: 'black_widow', env: 'marvel' },
  { id: 3, name: 'wonder_woman', env: 'dc_comics' },
];
function hasCharacterFrom(env) {
  return character => character.env === env;
}
console.log(characters.find(hasCharacterFrom('marvel')));
// { id: 1, name: 'ironman', env: 'marvel' }
console.log(characters.some(hasCharacterFrom('marvel')));
// true
ログイン後にコピー

4. Array.map と Array.filter を組み合わせて使用​​せず、Array.reduce を使用してください

Array.reduce は少し理解するのが難しいです。しかし、毎回 Array.filter と Array.map を同時に使用すると、何かが必要になることに気づきますよね?

私が言いたいのは、配列全体を 2 回ループしたということです。 1 回目はフィルタリングして新しい配列を返し、2 回目はマップを通じて新しい配列を構築します。それぞれ独自のコールバック関数を持つ 2 つの配列メソッドを使用し、Array.filter によって返された配列が再度使用されることはありません。

非効率を避けるために、Array.reduce を使用することをお勧めします。同じ結果ですが、よりエレガントなコードになります。以下の例を参照してください:

'use strict';
const characters = [
  { name: 'ironman', env: 'marvel' },
  { name: 'black_widow', env: 'marvel' },
  { name: 'wonder_woman', env: 'dc_comics' },
];
console.log(
  characters
    .filter(character => character.env === 'marvel')
    .map(character => Object.assign({}, character, { alsoSeenIn: ['Avengers'] }))
);
// [
//   { name: 'ironman', env: 'marvel', alsoSeenIn: ['Avengers'] },
//   { name: 'black_widow', env: 'marvel', alsoSeenIn: ['Avengers'] }
// ]
console.log(
  characters
    .reduce((acc, character) => {
      return character.env === 'marvel'
        ? acc.concat(Object.assign({}, character, { alsoSeenIn: ['Avengers'] }))
        : acc;
    }, [])
)
// [
//   { name: 'ironman', env: 'marvel', alsoSeenIn: ['Avengers'] },
//   { name: 'black_widow', env: 'marvel', alsoSeenIn: ['Avengers'] }
// ]
ログイン後にコピー

以上がJavaScript 配列メソッドの誤った使用例を 4 つ共有するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

foreach ループを使用して PHP 配列から重複要素を削除するにはどうすればよいですか? foreach ループを使用して PHP 配列から重複要素を削除するにはどうすればよいですか? Apr 27, 2024 am 11:33 AM

foreach ループを使用して PHP 配列から重複要素を削除する方法は次のとおりです。配列を走査し、要素がすでに存在し、現在の位置が最初に出現しない場合は、要素を削除します。たとえば、データベース クエリの結果に重複レコードがある場合、このメソッドを使用してそれらを削除し、重複レコードのない結果を取得できます。

PHP 配列ディープ コピーの技術: さまざまな方法を使用して完璧なコピーを実現する PHP 配列ディープ コピーの技術: さまざまな方法を使用して完璧なコピーを実現する May 01, 2024 pm 12:30 PM

PHP で配列をディープ コピーする方法には、json_decode と json_encode を使用した JSON エンコードとデコードが含まれます。 array_map と clone を使用して、キーと値のディープ コピーを作成します。シリアル化と逆シリアル化には、serialize と unserialize を使用します。

PHP 配列キー値の反転: さまざまな方法のパフォーマンス比較分析 PHP 配列キー値の反転: さまざまな方法のパフォーマンス比較分析 May 03, 2024 pm 09:03 PM

PHP の配列キー値の反転メソッドのパフォーマンスを比較すると、array_flip() 関数は、大規模な配列 (100 万要素以上) では for ループよりもパフォーマンスが良く、所要時間が短いことがわかります。キー値を手動で反転する for ループ方式は、比較的長い時間がかかります。

PHP 配列の多次元ソートの実践: 単純なシナリオから複雑なシナリオまで PHP 配列の多次元ソートの実践: 単純なシナリオから複雑なシナリオまで Apr 29, 2024 pm 09:12 PM

多次元配列のソートは、単一列のソートとネストされたソートに分類できます。単一列のソートでは、array_multisort() 関数を使用して列ごとにソートできますが、ネストされたソートでは、配列を走査してソートするための再帰関数が必要です。具体的な例としては、製品名による並べ替えや、売上数量や価格による化合物の並べ替えなどがあります。

PHP 配列のディープ コピーのベスト プラクティス: 効率的な方法を発見する PHP 配列のディープ コピーのベスト プラクティス: 効率的な方法を発見する Apr 30, 2024 pm 03:42 PM

PHP で配列のディープ コピーを実行するためのベスト プラクティスは、 json_decode(json_encode($arr)) を使用して配列を JSON 文字列に変換し、それから配列に戻すことです。 unserialize(serialize($arr)) を使用して配列を文字列にシリアル化し、それを新しい配列に逆シリアル化します。 RecursiveIteratorIterator を使用して、多次元配列を再帰的に走査します。

データソートにおけるPHP配列グループ化機能の応用 データソートにおけるPHP配列グループ化機能の応用 May 04, 2024 pm 01:03 PM

PHP の array_group_by 関数は、キーまたはクロージャ関数に基づいて配列内の要素をグループ化し、キーがグループ名、値がグループに属する要素の配列である連想配列を返すことができます。

PHP 配列のマージおよび重複排除アルゴリズム: 並列ソリューション PHP 配列のマージおよび重複排除アルゴリズム: 並列ソリューション Apr 18, 2024 pm 02:30 PM

PHP 配列のマージおよび重複排除アルゴリズムは、元の配列を小さなブロックに分割して並列処理する並列ソリューションを提供し、メイン プロセスは重複排除するブロックの結果をマージします。アルゴリズムのステップ: 元の配列を均等に割り当てられた小さなブロックに分割します。重複排除のために各ブロックを並行して処理します。ブロックの結果をマージし、再度重複排除します。

重複要素の検索における PHP 配列グループ化関数の役割 重複要素の検索における PHP 配列グループ化関数の役割 May 05, 2024 am 09:21 AM

PHP の array_group() 関数を使用すると、指定したキーで配列をグループ化し、重複する要素を見つけることができます。この関数は次の手順で動作します。 key_callback を使用してグループ化キーを指定します。必要に応じて、value_callback を使用してグループ化値を決定します。グループ化された要素をカウントし、重複を特定します。したがって、array_group() 関数は、重複する要素を見つけて処理するのに非常に役立ちます。

See all articles