ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript トピック 9: 配列内の指定された要素を検索する

JavaScript トピック 9: 配列内の指定された要素を検索する

coldplay.xixi
coldplay.xixi転載
2021-03-12 10:13:332906ブラウズ

JavaScript トピック 9: 配列内の指定された要素を検索する

#記事ディレクトリ

    • 1. findIndex と findLastIndex
      • #1.1 findIndex
        • 1.2 findLastIndex
        • ##1.3 findIndex と findLastIndex をマージ
        2. sortIndex
    • 2.1 トラバーサル
      • 2.2 二分法
        #3.indexOf と lastIndexOf
    • ##3.1 IndexOf 実装の最初のバージョン
      • 3.2 IndexOf と lastIndexOf の共通の最初のバージョン
        • 3.3 IndexOf と lastIndexOf 一般第 2 版
        • ##参考文献
        • #最後に記載
    • (無料学習に関する推奨事項:
    • #javascript ビデオ チュートリアル
  • #)

1. findIndex と findLastIndex1.1 findIndex findIndex() メソッドは、提供されたテスト関数を満たす配列内の最初の要素のインデックスを返します。対応する要素が見つからない場合は、-1 が返されます。

const array1 = [5, 12, 8, 130, 44];const isLargeNumber = (element) => element > 13;console.log(array1.findIndex(isLargeNumber));// expected output: 3

実装

Array.prototype.newFindIndex = function(callback) {
  const _arr = this;
  const len = _arr.length;
  for (let i = 0; i  element > 13;console.log(array1.newFindIndex(isLargeNumber));// 3
1.2 findLastIndex

同様に、過去を振り返って条件を満たす最初のメソッドを見つけるときは、次のように記述できます。

Array.prototype.newFindlastIndex = function(callback) {
  const _arr = this;
  const len = _arr.length;
  for (let i = len - 1; i >= 0; i--) {
    if (callback(_arr[i], i, _arr)) {
      return i;
    }
  }
  return -1;};const array1 = [5, 12, 8, 130, 44];const isLargeNumber = (element) => element > 13;console.log(array1.newFindlastIndex(isLargeNumber));// 4
上記のコードは前方検索とよく似ていますが、トラバーサルの条件を変更するだけです。

1.3 findIndex と findLastIndex をマージする

ご覧のとおり、ループの条件が異なることを除けば、2 つのメソッドはほぼ同じです。lodash を参照して、2 つのメソッドを簡略化します

/**
 * @private
 * @param {Array} array The array to inspect.
 * @param {Function} predicate The function invoked per iteration.
 * @param {boolean} [fromRight] 从右向左查找
 * @returns {number} 返回第一个符合条件元素的下标或-1
 */function baseFindIndex(array, predicate, fromRight) {
  const { length } = array;
  let index = fromRight ? length : -1; // 确定下标的边界

  while (fromRight ? index-- : ++index 

その兄弟を見てみましょう -

underscore

このアイデアは、渡されたさまざまなパラメータを使用してさまざまな関数を返すことです。

function createIndexFinder(dir) {
  return function(array, predicate, context) {
    const { length } = array;
    var index = dir > 0 ? 0 : length - 1;

    for (; index >= 0 && index <h4>findIndex</h4> について終わりました~新しいシナリオと実装を見てみましょう! <p></p><p><code></code></p>2.sortIndex<p><code></code>ソートされた配列内の </p>value<p> に対応する位置を見つけます。配列に挿入した後も、順序付けられた状態が維持されるようにします。 <img src="https://img.php.cn/upload/article/000/000/052/c975230185fb614ade747b6d7f8688db-0.jpg" alt="JavaScript トピック 9: 配列内の指定された要素を検索する"></p><pre class="brush:php;toolbar:false">const arr = [1, 3, 5];sortedIndex(arr, 0); // 0// 不需要插入arr
それでは、どうやってこれを達成するのでしょうか?

2.1 トラバーサル

誰もがトラバーサルについて考えることができますが、それが必ずしも最適な解決策であるとは限りません:

function sortIndex(array, value) {
  for (let i = 0; i  value) {
      return i;
    }
  }
  return array.length;}
2.2 二分法
function sortIndex(array, value) {
  let low = 0,
    high = array.length;
  while (low <p>3。 indexOf および lastIndexOf</p><h4></h4><p></p>indexOf()<h4>: 指定された要素が見つからない場合は、配列内の </h4>first <p> インデックスを返します。存在する -1 を返します。 fromIndex から開始して、配列の先頭から後方に検索します。 <strong></strong></p>lastIndexOf()
    : 配列内の指定された要素の
  • last のインデックスを返します。存在しない場合は -1 を返します。 fromIndex から開始して、配列の後ろから前方に検索します。 #3.1 IndexOf
    function indexOf(array, value) {
      for (let i = 0; i 
  • emmmm の実装の最初のバージョン...findIndex と lastFindIndex の実装を見た後は、indexOf もきちんと整理されているはずです~
  • 3.2 IndexOf と lastIndexOf 一般バージョン 1パラメータを使用してさまざまな検索メソッドを作成する
    function createIndexOf(dir) {
      return function(array, value) {
        let index = dir > 0 ? 0 : arr.length - 1;
        for (; index >= 0 && index 
  • 3.3 IndexOf と lastIndexOf 一般バージョン 2

今回は、指定した検索を許可します。 fromIndex の関数を見てください:

検索を開始する位置を設定します。インデックス値が配列の長さ以上の場合、配列内で検索が実行されず、-1 が返されることを意味します。

パラメーターで指定されたインデックス値が負の値の場合、配列の末尾からのオフセットとして使用されます。つまり、-1 は最後の要素から検索を開始することを意味し、-2 は 2 番目の要素から検索を開始することを意味します。最後の要素まで同様です。

注: パラメーターで指定されたインデックス値が負の値の場合でも、配列は前から後ろにクエリされます。オフセット インデックス値がまだ 0 未満である場合は、配列全体がクエリされます。デフォルト値は 0 です。

function createIndexOf(dir) {
  return function(array, value, fromIndex) {
    // 设定开始查找的位置。如果该索引值大于或等于数组长度,意味着不会在数组里查找,返回 -1。
    let length = array == null ? 0 : array.length;
    let i = 0;
    if (!length) return -1;
    if (fromIndex >= length) return -1;
    if (typeof fromIndex === "number") {
      if (dir > 0) {
        // 正序
        // 起始点>=0,沿用起始点,否则起始点为从后向前数fromIndex
        i = fromIndex >= 0 ? fromIndex : Math.max(length + fromIndex, 0);
      } else {
        // 倒序
        // 起始点>=0,沿用起始点,否则起始点为从后向前数fromIndex
        length =
          fromIndex >= 0
            ? Math.min(fromIndex + 1, length)
            : fromIndex + length + 1;
      }
    }
    // 起始下标
    for (
      fromIndex = dir > 0 ? i : length - 1;
      fromIndex >= 0 && fromIndex <h4>これを書くと、配列内の要素の検索が完了しました。独自の実装と </h4>loadsh<p> または </p>underscore<blockquote> との間には、まだ大きな違いがあります。上記 3 つのセクションのコードのより良い実装がある場合は、メッセージ領域に必ず書き込んでください~<p><br><br></p>
</blockquote><p><code>関連フリー学習に関する推奨事項: </code> <code></code>javascript</p><p><img src="https://img.php.cn/upload/article/000/000/052/13e94628b4e8e9557aa00016b9d87ab1-1.jpg" alt="JavaScript トピック 9: 配列内の指定された要素を検索する">(ビデオ)</p><blockquote><p></p></blockquote>

以上がJavaScript トピック 9: 配列内の指定された要素を検索するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。