web-dev-qa-db-ja.com

複数の値を持つJavascriptindexOfメソッド

複数の同じ値を含むarrayがあります

_["test234", "test9495", "test234", "test93992", "test234"]
_

ここでは、配列内のすべての_test234_のインデックスを取得したいと思います

そのために私はArray.prototype.indexOf()メソッドを試しました。しかし、それは私に_0_を返すだけですが、私はそれが私に_[0, 2, 4]_を返すことを望みます。

どうやってやるの?

_var array = ["test234", "test9495", "test234", "test93992", "test234"];
document.write(array.indexOf("test234"));_
5
user5672329

各配列要素をチェックするためのforループにするだけです。

var array = ["test234", "test9495", "test234", "test93992", "test234"];

for (i=0;i<array.length;i++) {
  if (array[i] == "test234") {
    document.write(i + "<br>");
  }
}
7
JoeL

この種の関数は組み込まれていませんが、自分で作成するのは非常に簡単です。ありがたいことに、indexOfは2番目のパラメーターとして開始インデックスを受け入れることもできます。

function indexOfAll(array, searchItem) {
  var i = array.indexOf(searchItem),
      indexes = [];
  while (i !== -1) {
    indexes.Push(i);
    i = array.indexOf(searchItem, ++i);
  }
  return indexes;
}

var array = ["test234", "test9495", "test234", "test93992", "test234"];
document.write(JSON.stringify(indexOfAll(array, "test234")));
3
4castle

reduce を使用できます:

const indexesOf = (arr, item) => 
  arr.reduce(
    (acc, v, i) => (v === item && acc.Push(i), acc),
  []);

そう:

const array = ["test234", "test9495", "test234", "test93992", "test234"];
console.log(indexesOf(array, "test234")); // [0, 2, 4]

別のアプローチは、 イテレータ

function* Finder(array, item) {
  let index = -1;
  while ((index = array.indexOf(item, index + 1)) > -1) {
    yield index;
  }
  return -1;
}

それはあなたに怠惰な方法で検索をする柔軟性を与えます、あなたはそれを必要とするときだけそれをすることができます:

let findTest234 = Finder(array, "test234");

console.log(findTest234.next()) // {value: 0, done: false}
console.log(findTest234.next()) // {value: 2, done: false}
console.log(findTest234.next()) // {value: 4, done: false}    
console.log(findTest234.next()) // {value: -1, done: true}

もちろん、いつでもループで使用できます(イテレーターであるため)。

let indexes = Finder(array, "test234");

for (let index of indexes) {
   console.log(index);
}

そして、すぐにイテレータを使用して配列を生成します。

let indexes = [...Finder(array, "test234")];
console.log(indexes); // [0, 2, 4]

それが役に立てば幸い。

0
ZER0

ForループでindexOfを使用して、0、2、4のインデックス値を取得できます。

var array = ["test234", "test9495", "test234", "test93992", "test234"];
let newArr=[];
for (i=0;i<array.length;i++) {
  if (array[i].indexOf("test234") >=0 ) {
    newArr.Push(i);
  }
}
document.write(newArr);
0
Paul Kurtis