Эй, друзья! Это моя первая статья здесь, и я хотел бы поделиться опытом, который у меня был недавно.

Недавно я проходил собеседование на должность разработчика, и рекрутер задал мне следующий вопрос: «Может ли JS Map() модифицировать элемент массива? Да или нет и почему?». Для меня это был вопрос с подвохом, и с тех пор я чувствую готовность написать этот текст, чтобы изучить метод Map().

Я считаю, что ответ на вопрос зависит от того, как вы реализуете метод.

Гипотеза 01 — заменить все элементы исходного массива.

let originFoodList = ['Banana','Apple','Orange']
originFoodList = originFoodList.map((food) => {
    food = 'New Food'
    return food
})
originFoodList will be: 
[ 'New Food', 'New Food', 'New Food' ]

То, что мы делаем выше, заменяет все элементы массива, но я могу рассматривать это как способ «модифицировать» все элементы массива.

Гипотеза 02 — заменить элементы по каждому индексу.

const originFoodList = ['Banana','Apple','Orange']
originFoodList.map((food, index) => {
     originFoodList[index] = 'New Food'
})
originFoodList will be: 
[ 'New Food', 'New Food', 'New Food' ]

Здесь я использую короткую форму, чтобы сделать то же самое в Гипотезе 01.

Обе эти 2 гипотезы также будут работать, если элементы массива являются такими объектами, как:

const officers = [
    { id: 20, name: 'Captain X' },
    { id: 24, name: 'General M' }
]
officers.map((officer, index) => {
     officers[index] = { id: 0, name: 'Major Zerooo'},
})
officers will be: 
[ { id: 0, name: 'Major Zerooo'}, { id: 0, name: 'Major Zerooo'}]

и мы можем заменить элементы свойств объекта (это может быть Гипотеза 03):

const officers = [
    { id: 20, name: 'Captain X' },
    { id: 24, name: 'General M' }
]
officers.map((officer, index) => {
     officer.id = 50,
})
officers will be: 
[ { id: 50, name: 'Captain X'}, { id: 50, name: 'General M'}]

Наконец, мы не можем изменять элементы исходного массива, просто перезаписывая значение, например:

const officers = [
    { id: 20, name: 'Captain X' },
    { id: 24, name: 'General M' }
]
officers.map((officer) => {
     officer = 'Let try overwrite it'
})
officers will be: 
[  { id: 20, name: 'Captain X' },  { id: 24, name: 'General M' }]

or

const originFoodList = ['Banana','Apple','Orange']
originFoodList.map((food) => {
    food = 'New Food'
})
originFoodList will be: 
['Banana','Apple','Orange']

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

Не стесняйтесь оставлять свои комментарии и вклад ниже! Помогите разобраться с новой гипотезой или просто поделитесь похожим опытом :)