Как заменить элемент в массиве без изменения других элементов?

#javascript

#javascript

Вопрос:

Если у меня есть этот массив ['Jan', 'March', 'April', 'June'] . Как заменить 'April' на 'newVal' и сохранить все остальные элементы без изменений. Я пытался

 const months = ['Jan', 'March', 'April', 'June'];
months.splice(3, 1, 'newVal');
console.log(months);
  

Я хочу, чтобы он возвращал ['Jan', 'March', 'newVal', 'June']
но он возвращает ["Jan", "March", "April", "newVal"]

Комментарии:

1. месяцы[2] = «newVal»

2. Индекс массивов начинается с 0 . Таким образом, индекс должен быть 2

3. что вы имеете в виду под » не касаясь «?

Ответ №1:

Почему бы не назначить напрямую?

 const
    months = ['Jan', 'March', 'April', 'June'];

months[2] = 'newVal';

console.log(months);  

Ответ №2:

Ты можешь это сделать:

 a.splice(2,1,"newVal")
  

Он удаляет 1 элемент в позиции 2 и добавляет новое значение «newVal»

Ответ №3:

Вы могли бы сначала найти Arrray.prototype.indexOf() некоторую «строку», чем вы можете напрямую заменить ее:

 const arr = ["a", "b", "c", "d"];
const idx = arr.indexOf("c");       // 0..N or -1 if not found

// Make sure the index is found, than replace it
if (idx > -1) arr.splice(idx, 1, "newVal");
  

Отличная функция повторного использования:

 const replaceInArray = (arr, oldVal, newVal) => {
  const idx = arr.indexOf(oldVal);
  if (idx > -1) arr.splice(idx, 1, newVal);
};



const months = ['Jan', 'March', 'April', 'June'];
replaceInArray(months, "April", "newVal");
console.log(months)  

Ответ №4:

Если вы знаете значение, которое хотите заменить (т. Е. Вы всегда хотите заменить ‘April’) :

 months[months.indexOf("April")] = 'newVal';
  

Ответ №5:

Всегда помните, что первый индекс массива всегда равен 0, поэтому просто сделайте это вместо :

 months.splice(2,1,"newVal")
  

Ответ №6:

Функция, которую вы использовали, была правильной, но Вы ошибочно приняли значение индекса элемента april массива months

Правильное значение индекса april равно 2

Итак, ваш код будет выглядеть следующим образом

 const months = ['Jan', 'March', 'April', 'June'];
months.splice(2, 1, 'newVal');
console.log(months);