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