Итак, я работал над некоторым кодом и заметил, что предыдущий человек изменял исходный массив по ссылке, и как я думал, что функция .map () в javascript работает, возвращая новую копию с изменениями, возвращаемыми на карте.
В приведенном ниже коде показано, как функция присваивается массиву.
async assignProductCategoriesToOrders(orders) {
const { selectedOrganisation } = this.props;
const response = await Fetcher.get(ProductsService
.ProductCategories.format(selectedOrganisation.id));
if (!response.ok) {
orders.map((order) => order.products.map((product) => {
product.productCategory = { name: 'N/A' };
return product;
}));
} else {
const productCategories = await response.json();
orders.map((order) => order.products.map((product) => {
product.productCategory = productCategories.find((p) => p.id === product.productCategory)
|| { name: 'N/A' };
return product;
}));
}
return orders;
}
при передаче массива заказов это выглядит так
и после выполнения функции это выглядит так
Таким образом, он переназначает новый объект productCategory существующему массиву без возврата карт из функции.
Заранее спасибо, было бы здорово узнать, как это работает.
map
действительно возвращает новый массив, но если ваш массив содержит ссылки на вложенные объекты или массивы, они могут быть изменены. - person Brian Thompson   schedule 24.01.2020map
возвращает массив, но в функции обратного вызова ясно, что разработчик изменяет существующий объект, а также не сохраняет новый массив карты ни в одной переменной. Разработчик использует карту только для итерации, и это нормально. - person Mr_Green   schedule 24.01.2020forEach
- person Keith   schedule 24.01.2020