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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

JavaScript

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

1回答

1107閲覧

javascript アルゴリズム 、配列、リニアサーチでグループに分ける

MiS

総合スコア1

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

JavaScript

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

1クリップ

投稿2020/09/24 23:26

アルゴリズムを勉強し始めたばかりです。わかる方いらしたら、お力を貸してください。
よろしくお願いします。

前提・実現したいこと

リニアサーチを使い配列の中からどのグループに当てはまるか、探すコードを作る問題です。

発生している問題・エラーメッセージ

} else if (target > arr[i + 1].weight && target <= arr[i].weight) { ^ TypeError: Cannot read property 'weight' of undefined

該当のソースコード

js

1let potatos = [{ 2 size: 'S', 3 weight: 149 4}, { 5 size: 'M', 6 weight: 249 7}, { 8 size: 'L', 9 weight: 349 10}, { 11 size: '2L', 12 weight: 549 13}, { 14 size: '3L', 15 weight: 678 16}] 17 18let whitePotatos = [{ 19 size: 'S', 20 weight: 80 21}, { 22 size: 'M', 23 weight: 126 24}, { 25 size: 'L', 26 weight: 234 27}, { 28 size: '2L', 29 weight: 365 30}, { 31 size: '3L', 32 weight: 789 33}] 34 35const findGroup = function (arr, target) { 36 for (let i = 0; i < arr.length; i++) { 37 if (target >= 0 && target <= arr[0].weight) { 38 return `this totato is size ${arr[i].size}` 39 } else if (target > arr[i - 1].weight && target <= arr[i].weight) { 40 return `this totato is size ${arr[i].size}` 41 } 42 } 43} 44 45findGroup(potatos, 339) 46findGroup(potatos, 879) 47findGroup(potatos, 149) 48findGroup(whitePotatos, 249) 49findGroup(whitePotatos, 156) 50findGroup(whitePotatos, 678) 51 52 53console.log(findGroup);

試したこと

[i-1]と定義するのが間違えているのかと思い、
代わりにindex = i - 1 を定義してみたのですが、
それもダメでした。

const findGroup = function (arr, target) { for (let i = 0; i < arr.length; i++) { let index = i - 1 if (target >= 0 && target <= arr[0].weight) { return `this totato is size ${arr[i].size}` } else if (target > arr[index].weight && target <= arr[i].weight) { return `this totato is size ${arr[i].size}` } } }

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

Zuishin

2020/09/24 23:30

「リニアサーチ」という言葉が出ているところから何かの課題だと思いますが、こんな初歩から他人に聞いたら落ちこぼれる運命が決定しますけど、それでいいんですか?
kuma_kuma_

2020/09/25 00:03

慣れてる人がソースコードを見ると「どこかのサイトからコピーしてきたのか」のか「自分で作ったか」すぐ判断が付きます。 今回は良くても今後同じ問題に当たった時「自分で調べて解く」事を覚えないとどんどん苦しくなりますよ。 せっかく「リニアサーチ」という単語がありますのでそれで検索すると図解で丁寧な説明が出てきます。 あとは自分のつくったプログラムを1ステップずつ実行して確認してみましょう。
guest

回答1

0

arr[i-1]だとi=0の時にi-1-1になってしまいます。
正常に動作するなら下記のようにi+1で対処すべきかと。

javascript

1const findGroup = function (arr, target) { 2 for (let i = 0; i < arr.length; i++) { 3 if (target >= 0 && target <= arr[i].weight) { 4 return `this totato is size ${arr[i].size}` 5 } else if (target > arr[i].weight && target <= arr[i+1].weight) { 6 return `this totato is size ${arr[i+1].size}` 7 } 8 } 9}

学習目的でもあるようなので、なるべく原型を崩さないようにしましたが、
そもそも配列の扱い方等々を学習し直した方が良いかなと思います。

投稿2020/09/25 00:10

nekoniki

総合スコア2411

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

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

MiS

2020/09/25 00:53

ありがとうございます!始めたばかりで、今はどのようにアルゴリズムを考えるかということに集中しています!
nekoniki

2020/09/25 04:38

> 今はどのようにアルゴリズムを考えるかということに集中しています! であれば回答そのものを提示すべきではなかったかもしれませんね・・・ 他の方も修正依頼でコメントされているように、どういう原理でアルゴリズムがあり、コードで再現するにはどうしたらいいかを自身で考えながら学習することをお勧めします。 私が提示したコードはあくまで実装例として捉えていただきたいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問