複数の同じ値を含む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"));
_
各配列要素をチェックするためのforループにするだけです。
var array = ["test234", "test9495", "test234", "test93992", "test234"];
for (i=0;i<array.length;i++) {
if (array[i] == "test234") {
document.write(i + "<br>");
}
}
この種の関数は組み込まれていませんが、自分で作成するのは非常に簡単です。ありがたいことに、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")));
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]
それが役に立てば幸い。
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);