Как правило, я предпочитаю использовать для цикла , когда число итераций известно с самого начала, и в этом случае map
, вероятно, будет наиболее целесообразным, как отмечалось в ответе от @ kemotoe (но я понимаю, что это задание). Есть несколько вещей, которые вам нужно исправить (некоторые из них были упомянуты в комментариях и других ответах, но сведены здесь для справки).
1) Ваше назначение говорит, что ваша функция должна принять один аргумент, массив . Таким образом, вам нужно иметь аргумент (или параметр) в скобках определения вашей функции, а затем передавать свой входной массив в функцию, когда вы ее вызываете. Что-то вроде:
// function definition
function johnLennonFacts(arr) {
// your code
}
// pass your "facts" array to the function when you call it
johnLennonFacts(facts);
2) Ваш текущий оператор while
попытается записать последние 3 элемента вашего массива, потому что вы увеличиваете i
перед тем, как записывать значение вашего массива, а 1 является индексом второй элемент в вашем массиве, поскольку массивы индексируются нулем (это означает, что первый элемент в вашем массиве имеет индекс 0). Тогда ваш цикл столкнется с проблемой, которую он не сможет обработать, когда i
увеличен до 4, но в индексе 4 нет элемента facts
. Другие ответы дают некоторое представление о том, как вы можете исправить свой цикл while.
3) Вам необходимо присвоить facts[i] + '!!!'
индексу в массиве, который вы планируете вернуть из своей функции. JavaScript не знает, что вы хотите изменить facts[i]
на основе этой строки, он просто видит, что вы комбинируете его с каким-то другим текстом, но никуда не помещаете. Другие ответы дают некоторое представление о том, как вы можете назначить новую объединенную строку индексу в массиве, который вы вернете из своей функции.
Просто для забавы, здесь есть альтернатива другим ответам, которые могут дать вам дополнительное представление о том, как работают функции, циклы и массивы.
const facts = [
"He was the last Beatle to learn to drive",
"He was never a vegetarian",
"He was a choir boy and boy scout",
"He hated the sound of his own voice"
];
const exclamation = (arr) => {
let i = arr.length;
while (i) {
i--;
arr[i] += '!!!';
}
return arr;
}
let loudfacts = exclamation(facts);
console.log(loudfacts);
/*
[
"He was the last Beatle to learn to drive!!!",
"He was never a vegetarian!!!",
"He was a choir boy and boy scout!!!",
"He hated the sound of his own voice!!!"
]
*/
const exclamation = (arr) => {...}
- это еще один способ определения функции (которая называется функция стрелки )
- начинается с присвоения
i = arr.length
, чтобы мы могли вернуться в обратном направлении через массив
- уменьшает
i
с использованием i--
перед тем, как назначить новую строку любому индексу массива, потому что мы знаем, что самый высокий индекс массива будет на единицу меньше его длины, поскольку массивы индексируются нулем
- назначает новое строковое значение каждому индексу массива, используя
arr[i] += '!!!'
, что является кратким способом произнесения arr[i] = arr[i] + '!!!'
- , поскольку ноль - это "ложное" значение, цикл while завершается после итерации, где
i
уменьшается до нуля
- затем мы возвращаем модифицированное
arr
из функции
- мы вызываем нашу функцию и передаем ей массив
facts
, присваивая возвращаемое значение переменной с помощью let loudfacts = exclamation(facts);