Эй, друзья! Это моя первая статья здесь, и я хотел бы поделиться опытом, который у меня был недавно.
Недавно я проходил собеседование на должность разработчика, и рекрутер задал мне следующий вопрос: «Может ли 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']
Честно говоря, я знал, действительно ли я понял вопрос рекрутера или действительно ли рекрутер знал цель этого вопроса, потому что он звучит для меня немного пустым.
Не стесняйтесь оставлять свои комментарии и вклад ниже! Помогите разобраться с новой гипотезой или просто поделитесь похожим опытом :)