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

Какая цель?
Два массива: заказы и NewOrders

Проверить, есть ли заказ с одинаковым order_id в обоих массивах, затем сравнить статус заказа, если заказ из массива NewOrders имеет другой статус, то установить orders[i].status = NewOrders[i].status

Мой текущий код:

const {orders} = this.state;

const page = this.state.page;
const newOrders= await api.get('/orders?page='+page);

for (let i = 0; i < newOrders.length; i++) {
    orders[newOrders[i].order_id].status = newOrders[i].status;             
}

Это не работает должным образом
Как я могу заставить это работать с помощью ES6?

Вы уверены, что order_id является правильным индексом в массиве заказов? Это кажется маловероятным.

jarmod 20.03.2022 16:36

Должны ли вы так мутировать состояние в React?

re-za 20.03.2022 16:40
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
29
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете использовать Array#find.

for (const order of orders) {
    const newOrder = newOrders.find(x => x.order_id === order.order_id);
    if (newOrder) order.status = newOrder.status;
}
Ответ принят как подходящий

Если вы работаете в React, вы не должны изменять состояние вручную. Сопоставьте заказы в новый массив на основе необходимых преобразований, а затем используйте setState() для обновления состояния.

const _orders = orders.map(o => {
    const found = newOrders.find(no => o.order_id === no.order_id)
    return found
        ? { ...o, status: found.status }
        : o
})

this.setState({orders: _orders})

Пример

const orders = [
    { order_id: "1", status: "OK" },
    { order_id: "2", status: "NOK" },
]
const newOrders = [
    { order_id: "2", status: "OK" },
    { order_id: "3", status: "OK" },
]

Выход

[
    { order_id: "1", status: "OK" },
    { order_id: "2", status: "OK" },
]

Другие вопросы по теме