質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

3回答

206閲覧

リスト内から、最も大きい数字4つとそのインデックスを取得する方法

trafalbad

総合スコア303

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2019/05/13 00:17

Promiseオブジェクトのlist内から、最も大きい数字を上から4つ、そのインデックスとともに取得したいです。

実際に一番大きい値とそのインデックスは以下の方法で取得しました。

これを後、3回行い、最も大きい数字を上から4つとそのインデックスを取得したいですが、2回目以降のやり方がわからないので教えてください。

accuraylistsのオブジェクトはPromiseです。

javascript

1let accuraylists = accuracyScores.data(); 2accuraylists.then(function(e) { 3 var maxindex = e.indexOf(Math.max.apply(null, e)); 4 var maxacc = e.indexOf(maxindex); 5 console.log(maxindex, maxacc); 6 }); 7 8>>> 574, 1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

accuraylistsオブジェクトが具体的にどう機能しているかわかりませんが
eが配列またはそれに類する要素ならソートして4回shiftできませんか?

sample

適当なデータでsampleあげておきます

javascript

1var a=[4,3,1,5,2]; 2var b=a.map((x,y)=>[y,x]).sort((x,y)=>x[1]<y[1]); 3console.log(b.shift()); 4console.log(b.shift()); 5console.log(b.shift());

※同値があったときどうするかなど仕様をきちんと決めておいたほうがよいでしょう

投稿2019/05/13 00:23

編集2019/05/13 00:43
yambejp

総合スコア114581

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

trafalbad

2019/05/13 00:31

ソートするとリスト内でインデックスがリセットされてしまうんですが、リスト内から最大値の上から4番目まで取得する方法ありませんでしょうか?
yambejp

2019/05/13 00:44 編集

であればmapで一度データを別の配列に吐いてからとればいいでしょう いずれにしろ具体的なデータの例示がないと回答もぼんやりしかできません (一応sample追記しておきました)
trafalbad

2019/05/13 02:18

できました、ありがとうございます!
guest

0

こんにちは

数値を要素とする配列e があり、そこから

最も大きい数字を上から4つ、そのインデックスとともに取得

するコードとしては、以下も考えられます。

javascript

1e.map((v, i) => [v, i]) 2 .sort((a, b) => b[0] - a[0]) 3 .slice(0,4);

上記によって、

  • [値, インデクス]という長さが2の配列を要素とし、
  • 各要素の持っている の降順にソートされた、
  • 先頭4件

の配列が得られます。

以下、上記のコードを動作確認するサンプルです。

以上参考になれば幸いです。

投稿2019/05/13 02:25

jun68ykt

総合スコア9058

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

※すみません、題意を汲みなおして回答しなおしです

spliceでもとのmaxの値をnullに上書きしながら行うのはいかがでしょうか。

javascript

1const e = [3,1,2,10,5,20,1]; 2for(let i = 0; i < 4; i++) { 3 const maxindex = e.indexOf(Math.max.apply(null, e)); 4 console.log(`${e[maxindex]}, ${maxindex}`); 5 e.splice(maxindex, 1, null); 6}

同値がある場合は手前から出ます。("20, 1", "20, 3"とか)
元の配列を変更したくない場合は、Object.assign(https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)で`e`のコピーを取っておくといいと思います。
※ただし配列内が実際は数値でなくオブジェクトの場合はディープコピーでないので注意が必要です。

投稿2019/05/13 01:27

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

trafalbad

2019/05/13 02:17

できました、ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問