Почему эта функция не может прочитать неопределенную переменную, в то время как переменная фактически определена? - PullRequest
0 голосов
/ 26 января 2020

Это функция:

function exchangeScore(players) {
  for (let i = 0; i < listItem.length; i++) {
    for (let j = 0; j < listItem.length - i - 1; j++) {
      if (listItem[j].harga < listItem[j + 1].harga) {
        var tmp = listItem[j]
        listItem[j] = listItem[j + 1]
        listItem[j + 1] = tmp
      }
    }
  }

  let output = []
  for (let i = 0; i < players.length; i++) {
    let person = {}
    person.name = players[i].name
    person.items = []
    person.points = players[i].points
    output.push(person)
  }


  for (let i = 0; i < output.length; i++) {
    var k = 0
    while (output[i].points > 0 && listItem[k].stock > 0) {
      if (output[i].points >= listItem[k].harga && listItem[k].stock > 0) {
        output[i].items.push(listItem[k].name)
        listItem[k].stock--
          output[i].points -= listItem[k].harga
      }
      k++
    }
  }
  return output
}

let listItem = [
  {name: "Teddy Bear", harga: 1000, stock:1},
  {name: "Toy Soldier", harga: 200, stock: 5},
  {name: "Ducky", harga: 500, stock: 3},
  {name: "Bunny", harga: 300, stock: 2},
  {name: "Buzz Lightyear", harga: 2000, stock: 1}]

console.log(exchangeScore([
   {name: "Yanto Kopling", points:100}, 
   {name: "Audric", points: 300}, 
   {name: "Ayu", points: 1000}, 
   {name: "Semmi", points:1000}, 
   {name: "Mahdi", points: 2000}, 
   {name: "Sofyan", points: 2000}
 ]));

Функция продолжает возвращать "Ошибка типа: Не удается прочитать свойство 'stock' с неопределенным значением на exchangeScore (/home/runner/MotherlyYummyTest/index.js:31:45) «пока я думаю, что должен определить все переменные. У вас есть идеи по поводу этой проблемы?

1 Ответ

2 голосов
/ 26 января 2020

Вам нужно изменить время l oop

while (output[i].points > 0 && listItem[k] && listItem[k].stock > 0)

В вашем коде k увеличивается каждый раз, когда l oop. На k = 5 нет элемента в позиции listItem[5]. Так что это выдаст ошибку`

listItem[k] is undefined

Так что перед проверкой listItem[k].stock > 0, вам нужно проверить, есть ли что-нибудь.

...