Как использовать для цикла, в результате чего массив в качестве вывода

Я хочу использовать дни в массиве с именем days и получить результат в виде массива, вызвав console.log(days).
Пожалуйста, смотрите ниже: Кто-нибудь может помочь мне закончить код в блоке цикла for?

редактировать (резюме): я задал этот вопрос, чтобы узнать причину, по которой значение каждого "дня" не меняется в этом случае. и Сурен Срапян дал отличный ответ на это: "Вы получаете копию каждого элемента в цикле. Поэтому day является только копией значения элемента, и изменение его на другое значение не изменит элемент в массиве.'

let days = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'];

for (day of days) {
    day = day[0].toUpperCase() + day.slice(1);
    // your code goes here

}
console.log(days);

4 ответа

Решение

for of не похоже ни на одну простую петлю. Под ним другая конструкция.

Вы получаете копию каждого элемента в цикле. Так day является только копией значения элемента, и изменение его на другое значение не изменит элемент в массиве.

Вот что происходит под for of петля.

let days = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'];

const iterator = days[Symbol.iterator]();
let item = iterator.next();

while(!item.done) {
    console.log(item.value);
    item = iterator.next();
}

Выше код показывает, что for of цикл предназначен только для чтения

Вы можете использовать функцию Array#map для него

let days = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'];

days = days.map(day => day[0].toUpperCase() + day.slice(1));

console.log(days);

Попробуйте это, и я думаю, что это поможет

const days = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'];

for (let day of days){ 

    let firstLetter= day.substr(0,1)
    let otherLetters=day.substr(1)
    console.log(firstLetter.toUpperCase().concat(otherLetters));

} 

Вы также можете использовать метод Reduce массива

let days = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'];

let result = days.reduce((r,a)=>r.concat(a.charAt(0).toLocaleUpperCase()+a.slice(1)),[]);

console.log(result)

Вы также можете использовать цикл forEach для выполнения задачи.

days.forEach(function(item, index, array) {
      array[index] = item[0].toUpperCase() + item.slice(1)
});
console.log(days);
Другие вопросы по тегам