
条件に一致した配列のインデックスを取り出したい。
実現したい内容
let array = [ 25, 15, 40, 70, 20 ] で 25以上の数値のもののインデックスを出力したい。
試したこと
①passIndexを使用してみましたが 0 が出力されてしまった。
let M = 25
let passIndex = array.findIndex(function(element){
return element >= M;
});
配列の中身を取ることは、できたのですがインデックスで取得する方法が
わからず苦戦しております。
以下のような質問にはグッドを送りましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
下記のような質問は推奨されていません。
- 間違っている
- 質問になっていない投稿
- スパムや攻撃的な表現を用いた投稿
適切な質問に修正を依頼しましょう。


退会済みユーザー
2022/11/27 10:55

退会済みユーザー
2022/11/27 11:44
回答4件
1
こうしてもよいかも
javascript
1let M = 25; 2let array = [ 25, 15, 40, 70, 20 ]; 3let indexs= array.map((_,x)=>x).filter(x=>array[x]>=M); 4console.log(indexs);
投稿2022/11/28 00:48
総合スコア109126
良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
このような回答には修正を依頼しましょう。
1
passIndexを使用してみましたが 0 が出力されてしまった。
.findIndex()
は、配列の中で条件に合う「最初の要素」が何番目にあるかを戻すメソッドです。
25以上の数字が配列の0番目にあるため、0を戻し、そこで処理を終了します。
コード例
私でしたら.flatMap()
メソッドを利用します。
javascript
1const array = [25, 15, 40, 70, 20]; 2const M = 25; 3const passIndex = array.flatMap((num, idx) => num >= M ? idx : []); 4console.log(passIndex); // [0, 2, 3]
.flatMap()
について
.map()
(配列の値を書き換え)ながら、.flat()
(配列を一段階平坦化。2次元配列なら→1次元配列化)し、新しい配列を生成してくれるメソッドです。
javascript
1配列.flatMap( (現在の要素, インデックス) => return 新しい値 )
私のコードの場合、
- 条件に合致していたら、その要素のインデックス番号に書き換え
- 合致していなかったら、空の配列に
[]
書き換え[0, [], 2, 3, []]
←一旦、こういう状態になる
- そして、↑の配列が平坦化されるときに空の配列は消え失せる
という処理をしています。
三項演算子について
?
や:
の部分は、三項演算子という記法で、if/elseを1行でかけます。
javascript
1条件 ? trueの場合の値 : falseの場合の値
if/elseとの比較です。
javascript
1const number = 10 2 3// 三項演算子 4const result = number >= 5 ? '5以上だよ!' : '5未満だよ…'; 5console.log(result); // '5以上だよ!' 6 7// if/else 8let result2; 9 10if (number >= 5) { 11 result2 = '5以上だよ!' ; 12} else { 13 result2 = '5未満だよ…'; 14} 15console.log(result2); // '5以上だよ!'
投稿2022/11/27 11:55
編集2022/11/27 11:57総合スコア2245
良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
このような回答には修正を依頼しましょう。
0
普通にループするのも参考までに書いときますね
javascript
1const array = [25, 15, 40, 70, 20]; 2const M = 25; 3let passIndex = []; 4for (let i=0;i<array.length;i++) 5 if (array[i]>=M) passIndex.push(i); 6console.log(passIndex);
投稿2022/11/27 12:56
総合スコア7421
良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
このような回答には修正を依頼しましょう。
0
期待値は
0,2,3 です。
ふむふむ。であれば
javascript
1const array = [ 25, 15, 40, 70, 20 ]; 2const M = 25; 3 4const passIndexes = array.reduce((ary, e, i) => e >= M ? [...ary, i] : ary, []); 5 6console.log(passIndexes); // => [0, 2, 3]
とかですかね〜
【別案1】再帰関数
javascript
1const findIndexes = (ary, min, start=0) => { 2 const index = ary.findIndex(e => e >= min); 3 return index >= 0 ? [start+index, ...findIndexes(ary.slice(index+1), min, start+index+1)] : []; 4}
というのを作っておいて、
javascript
1const array = [ 25, 15, 40, 70, 20 ]; 2const M = 25; 3const passIndexes = findIndexes(array, M); 4 5console.log(passIndexes); // => [0, 2, 3]
とする。
【別案2】mapしてfilterしてまたmapするっていう3工程になってしまうけれど、
javascript
1const array = [ 25, 15, 40, 70, 20 ]; 2const M = 25; 3const passIndexes = array.map((e, i) => ({ e, i })).filter(({ e }) => e >= M).map(({ i }) => i); 4 5console.log(passIndexes); // => [0, 2, 3]
【別案3】上の【別案2】を見直したらmapとfilterの2工程で済みました。
javascript
1const array = [ 25, 15, 40, 70, 20 ]; 2const M = 25; 3const passIndexes = array.map((e, i) => e >= M ? i : -1).filter(n => n >= 0); 4 5console.log(passIndexes); // => [0, 2, 3]
投稿2022/11/27 11:06
編集2022/11/27 15:15
退会済みユーザー
総合スコア0
良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
このような回答には修正を依頼しましょう。
関連した質問
Q&A
解決済
JavaScript forとsetTimeoutと配列を組み合わせた謎の挙動について
回答2
クリップ0
更新
2023/01/24
Q&A
受付中
「特定の文字種を1文字以上含む」という正規表現を書きたい
回答3
クリップ0
更新
2023/02/07
Q&A
解決済
mailtoの半角スペースの文字化け
回答1
クリップ2
更新
2023/02/04
Q&A
解決済
最速で配列からデータを取り出し、正規表現で検索したい。
回答3
クリップ1
更新
2023/01/31
Q&A
解決済
【Vue.js】dataの配列にmethodsの関数式を代入したい
回答2
クリップ0
更新
2023/02/07
Q&A
受付中
JS: 入れ子のオブジェクトの作り方
回答2
クリップ0
更新
2023/02/07
Q&A
解決済
jsとgasによるdoPostとfetch間によるhtmlファイルの受け渡しについて
回答1
クリップ2
更新
2023/01/30
Q&A
解決済
googleスプレッドシート、ピポットテーブルのフィルターを変更するには?
回答1
クリップ1
更新
2023/01/29
同じタグがついた質問を見る
JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。