アルゴリズムを勉強し始めたばかりです。わかる方いらしたら、お力を貸してください。
よろしくお願いします。
前提・実現したいこと
リニアサーチを使い配列の中からどのグループに当てはまるか、探すコードを作る問題です。
発生している問題・エラーメッセージ
} 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/ツールのバージョンなど)
ここにより詳細な情報を記載してください。