Правильное ли это решение? Есть ли более оптимальное?

Есть массив с именами:

const names = ['vLadiMir', 'MaRk', 'LoGAn', 'VicTOr', 'mAks', 'KaTe', 'AlEx'];

for (let i = 0; i < names.length; i++) {
  names[i] = names[i].toLowerCase();
  names[i] = names[i][0] + names[i][1] + names[i][2].toUpperCase() + names[i].slice(3)
  console.log(names[i]);
}

Задача: все символы должны быть в нижнем регистре, кроме 3-го, подскажите правильная ли это реализация? Либо можно оптимизировать?

И 2-й вопрос, как быть если нужно сделать upperCase для каждой 3-го символа, т.е для 3-го, 6-го, 9-го и т.д

введите сюда описание изображения


Ответы (1 шт):

Автор решения: entithat

Можно сделать так еще, но не сказал бы, что это более оптимизировано. Просто выглядит получше.

А ответ на второй вопрос, добавляем переменную i - индекс, буква под которым должна быть в аперкейсе.

const i = 2;
const names = ['vLadiMir', 'MaRk', 'LoGAn', 'VicTOr', 'mAks', 'KaTe', 'AlEx']
  .map(e => e.slice(0, i).toLowerCase() + e[i].toUpperCase() + e.slice(i + 1).toLowerCase());

console.log(names);

Либо так, если хотим несколько букв:

const i = [2, 4];
const names = ['vLadiMir', 'MaRk', 'LoGAn', 'VicTOr', 'mAks', 'KaTe', 'AlEx']
  .map(e => {
    const out = [...e.toLowerCase()];
    for (const j of i) {
      if (out.length > j) out[j] = out[j].toUpperCase();
    }
    return out.join('');
  });

console.log(names);

→ Ссылка