Как сделать так, чтобы в массиве при сравнении значения были равны?
Хочу написать простой "самоучитель" английского языка. Суть такая: есть форма для ввода слова (можно для удобства задать ей id='vocabular').
Перед формой ввода слово на русском - например "небо" - в форму нужно ввести слово на английском ("sky"). В самом массиве на JS уже прописано слово "sky" в массиве. Например как-то так:
let words1 = ['sky', 'world', 'dog', 'boy', 'sun', 'light']
Задача в том, чтобы сравнивать входящее из инпута слово с тем, которое написано на русском
let words2 = ['небо', 'мир', 'собака', 'мальчик', 'солнце', 'свет']
А в конце, если ответ правильный, выводить следующую карточку (ну или отображать, что ответ правильный)
let words1 = ['sky', 'dog', 'man']; // инициализируем переменную, содержащую массив слов на английском
let words2 = ['небо', 'собака', 'мужчина'] // инициализируем переменную, содержащую массив на русском
words1.includes( "sky" ); // возвращаемое значение true
words1.includes( "people" ); // возвращаемое значение false (значение не найдено в массиве)
words1.includes( "b"); // возвращаемое значение false (значение не найдено в массиве)
words1.includes( "dog"); // возвращаемое значение true
console.log();
но все еще не понимаю, как сравнить одно значение массива с другим
Вам просто нужно во время объявления слова Sky вписать в value индекс под каким он находится в массиве ,после чего при сравнение вы получаете тот самый value и сравниваете оба массива по этому индексу
Что не понятно ?
Joe Anno, а почему вы бежите впереди дороги?
самое простое на данном этапе это тупо записать в независимую переменную индекс
то есть для sky это будет 0, после того как пользователь ввёл слово вы сравниваете то что он ввёл и элемент под тем индексом что вы записали в переменную
чёт тип того
Можно через ассоциативный массив (ключ-значение).
Т.е. первый объект будет содержать инфу ключ-значение (например ["небо"- "sky"], ["мир"- "world"]). А из второго брать данные для поиска по ключу.
В интернете много инфы про реализацию словарей.
Joe Anno, через get/post запросы. Если вы все обрабатывает на стороне клиента, то get запрос, если на стороне сервера, то я бы обрабатывала через post. Но второе не критично, можно и через get. (Посмотрите инфу про XMLHttpRequest (JS) если на стороне клиента либо обработку глобальных переменных $POST /$GET (php). Либо, если у вас какой-то особенный сервер, то смотреть как именно ваш сервер обрабатывает такие запросы)
Наталья, Спасибо, попробую. Про ассоциативный массив (объект) я посмотрел, поизучал. Только не понял, как сравнить, используя ассоциативный массив
К примеру, на странице html я создам input, присвою ему id, чтобы потом повесить слушатель (addEventListener) для того, чтобы забирать value из input. Создам button, даже повешу на нее функцию.
Но почему-то не могу понять, как реализовать проверку слова.
let words = {
"sky" : "небо",
"dog" : "собака",
"sun" : "солнце"
};
Joe Anno, ээээ, я не очень поняла ваш вопрос =). Он как-бы две разные сферы разработки затрагивает и находится вне темы вашего основного вопроса =)
1.) База данных - это способ ХРАНЕНИЯ данных. Вы же будете где-то их хранить? Хоть в текстовом документе, но вам же нужно с чем-то сравнивать входящие данные =) т.е. какая-то база в любом случае нужна. Архитектура и способ реализации уже на ваше усмотрение.
2) Сравнение - это способ ОБРАБОТКИ данных. Тут не важно откуда вы данные-то взяли - на этот момент работы программы они уже есть и задача их обработать. Я просто описала один из возможных способов. Возможно, мой способ вам не подходит - просто поищите другой)
Наталья, вы такая умная, спасибо за объяснение, что уделили время.
Вот какие мне решения предлагали:
"можно object.entriesом все забираешь и сравниваешь: Object.entries(dict).map(([en,ru])=> if())
так правильнее
setValid(arr.every(({ru,en})=> ru === en), это для обычного массива объектов"
Я ничего не понял, поэтому ответил так:
"Прям самый начинающий, наверное, глупость спрошу, но ведь этот вариант работает, когда уже есть массив ru и массив en?"
Вот что мне ответили:
"не совсем понял но выглядеть будет как то так const elements = document.querySelectorAll('word_insert');
const russianwords = document.querySelectorAll('rus')
const words = Object.entries(dict)
elements.forEach((element)=>element.oninput = (ev) => words.forEach(([en,ru])=> ev.target.value === en) )
"
"Это деструктуризация элемента массива arr, где элемент - объект с полями ru и en"