Как решить задачу?
On the main page there is a form with a name entry field and a “Hello” button. When you click on the button, if the name first appears, display “Hello, <Name + Surname>” or “Hello, " (of your choice). name”.
There should also be a link on the main page, when you click on it you need to show a list of everyone you have already greeted.
А какие ограничения к задаче? Например, нужно ли использовать конккретные технологии (php на бекенде, базу данных). Или нужно написать что-то что будет просто удовлетворять условиям?
Если второй вариант, то задача решается через хранение данных в localStorage.
Вопрос очень пространственный чтобы дать на него ответ который тебе поможет. Попробуй сузить вопрос до момента который тебе не понятен.
Ограничений никаких особо нету, саму реализацию пытаюсь сделать. Считывания значений input в массив, проверка есть ли имя, есть => “уже виделись”, нету => Привет, “имя”
кнопка вывода всего массива.
Но как ни кручу, не получается :)
Я буду ориентироваться на решение через localStorage.
Тебе нужно написать логику сохранения в localStorage по таким шагам.
// достать строку из localStorage
// учесть граничный случай когда строки нет
// распарсить в объект (смотри на JSON.parse)
// изменить объект, добавив новый элемент с веденными данными
// превратить объект в строку (смотри на JSON.stringify)
// положить измененную строку в localStorage
Вывод значения из localStorage на половину такой же как и изменение значения (достать строку, распарсить).
Да, почти.
При нажатии кнопки: Привет, {user} (если этого значения нет в списке).
Либо же: Привет, уже виделись. (если он там есть).
И отдельная ссылка которая показывает всех user-ов.
В этом проблема
Смотри, у тебя есть массив var arr = [];, в котором хранится список имен.
Можно использовать find чтобы определить, есть уже имя в массиве или нет, после этого показать сообщение в зависимости от результата.
Немного непонятно, чего именно хотят от ссылки. Просто список на той же странице (тогда можно просто навешивать display:none/block; на твой <output>)? Или открыть отдельное окно (что, вероятно, имеет смысл, раз это ссылка) или всплывающее окно?
Извиняюсь что так часто задаю вопросы(новичек), пробую сам, затем пишу уже.
Можно ли при проверке прировнять значение количеству этих значений?
Пробую так (find и другие методы не работают).
Нет, так не получится, includes возвращает только true или false.
У тебя там проблема с порядком действий: сначала ты вынимаешь значение из инпута, потом сохраняешь его в массив, а только потом проверяешь, есть оно в массиве или нет (а оно всегда есть, потому что ты его всегда сохраняешь)
var input = document.getElementById("uname");
arr.push(input.value);
Попробуй следующий порядок:
вынуть значение из инпута и сохранить в переменную
проверить, есть ли значение в списке и показать сообщение
добавить значение в массив, если его там еще нет
очистить инпут
Помни также, что это может быть не просто show(), который вынимает из инпута и показывает, а, например show(currentName). Тогда ему вообще ничего не нужно знать о том, откуда это значение берется.