Uncaught ReferenceError: книги не определены

Напишите функцию checkBasket(), которая позволяет узнать, находится ли товар в корзине или нет.

Вот корзина с предметами:

amazonBasket = {
 glasses: 1,
 books: 2,
 floss: 100
}

Что я пробовал в своем JS:

function checkBasket(basket, lookingFor) {
   for(item of amazonBasket)
   {
       if (lookingFor===item){
           console.info("This item is in the basket")
       }else{
           console.info("This item is not in the basket")
       }
})
}

 checkBasket(amazonbasket, books)

то есть:

checkBasket(amazonbasket,книги)

он вернет "Этот товар в корзине"

Я не понимаю, почему книги не определены.

Единственный показанный books является собственностью amazonBasket . Показать больше контекста кода, связанного с вызовом checkBasket() согласно минимальный воспроизводимый пример

charlietfl 12.02.2019 02:30

Не просто описывайте свой код, предоставьте полный пример, демонстрирующий проблему. У вас нет ни переменной с именем books, ни переменной с именем amazonbasket, поэтому обе они не определены.

David 12.02.2019 02:31
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
718
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы используете словарь для хранения своих продуктов, поэтому лучший способ проверить, находится ли продукт в корзине, — перебрать ключи этого словаря. Можно просто через Object.keys(obj) получить массив с ключами, потом проверить, есть ли там нужный товар.

Имейте в виду, что вы не можете использовать books для поиска, только если вы предварительно инициализировали эту переменную следующим образом: let books = "books". В противном случае вам следует свериться со строкой «книги», так как при сравнении будет выполнено автоматическое преобразование.

amazonBasket = {
  glasses: 1,
  books: 2,
  floss: 100
}

function checkBasket(basket, lookingFor) {
  let inBasket = Object.keys(basket);
  let itemFound = false;

  for (let i = 0; i < inBasket.length; ++i) {
    if (lookingFor === inBasket[i]) {
      itemFound = true;
      break;
    }
  }

  
  if (basket.hasOwnProperty(lookingFor)) {
    console.info("This item is in the basket")
  } else {
    console.info("This item is not in the basket")
  }
}

checkBasket(amazonBasket, "glasses");
checkBasket(amazonBasket, "soda");

Конечно, это не лучшее, что вы можете сделать. У словарей в java script есть метод hasOwnProperty, который проверяет, есть ли у словаря определенный ключ. Ниже у вас есть рабочий пример, использующий this.

amazonBasket = {
  glasses: 1,
  books: 2,
  floss: 100
}

function checkBasket(basket, lookingFor) {
  if (basket.hasOwnProperty(lookingFor)) {
    console.info("This item is in the basket")
  } else {
    console.info("This item is not in the basket")
  }
}

checkBasket(amazonBasket, "glasses");
checkBasket(amazonBasket, "soda");

Ваше здоровье!

Используйте цикл for in для повторения каждого объекта, затем используйте оператор if, чтобы проверить, существует ли объект в корзине.

amazonBasket = {glasses: 1,books: 2,floss: 100}

function CheckBasket(lookingFor, basketToCheck){
  for(items in basketToCheck){
    if (items == lookingFor){
       alert("Item Found");
    }
  }
 }

 CheckBasket( "glasses", amazonBasket);
Ответ принят как подходящий

Проблема в том, что вы используете books (переменная), а не "books" (строка). Также проще использовать Object.keys.includes:

function checkBasket(basket, lookingFor) {
  if (Object.keys(basket).includes(lookingFor)) {
    console.info("This item is in the basket");
  } else {
    console.info("This item is not in the basket");
  }
}

amazonBasket = {
  glasses: 1,
  books: 2,
  floss: 100
}

checkBasket(amazonBasket, "books");

Другие вопросы по теме