Как обновить значение в массиве объектов в крючках useState

#javascript #arrays #reactjs

Вопрос:

Я новичок в React Hooks этом деле . У меня есть state , который выглядит так.

 const [myData, setmyData] = useState([
    {
        "OrderId": "ord-898s1",
        "Shoulder Size": "12",
        "Amount": 200,
        "Shoulder Width": "2",
       
    },
{
        "OrderId": "ord-898s2",
        "Shoulder Size": "14",
        "Amount": 790,
        "Shoulder Width": "2",
       
    }
])
var orderID = "ord-898s2"
var AmountToAdd = 100
 

Я хочу обновить Amount значение в OrderID ord-898s2 . При добавлении 100 значение суммы в OrderID ord-898s2 должно быть 890

 console.log(myData)
 

Требуемая Производительность:

 [
    {
        "OrderId": "ord-898s1",
        "Shoulder Size": "12",
        "Amount": 200,
        "Shoulder Width": "2",

    },
{
        "OrderId": "ord-898s2",
        "Shoulder Size": "14",
        "Amount": 890,
        "Shoulder Width": "2",

    }
]
 

Я попробовал вот это.

  const result2 = myData.map((item) => {
        if (item.OrderId === orderID) {
        
            return { ...item, ["Amount"]:item.Amount  100  }
         

        }
        
        return item
      })
     setmyData(result2)
      
 

это не удалось. Я не знаю, как это сделать. Пожалуйста, помогите мне с некоторыми решениями.

Комментарии:

1. Ваша .map() логика должна работать, что заставляет вас думать, что она не работает?

Ответ №1:

Ты мог бы сделать это вот так:

     setmyData((prev) =>
      prev.map((el) =>
        el.OrderId === "ord-898s2" ? { ...el, Amount: el.Amount   100 } : el
      )
    );
 

Ответ №2:

Попробуйте выполнить код ниже.

 var data = [
    {
        "OrderId": "ord-898s1",
        "Shoulder Size": "12",
        "Amount": 200,
        "Shoulder Width": "2",
       
    },
{
        "OrderId": "ord-898s2",
        "Shoulder Size": "14",
        "Amount": 790,
        "Shoulder Width": "2",
       
    }
];

var orderID = "ord-898s2"
var AmountToAdd = 100

data.forEach((item) =>
  item.OrderId === orderID ? item.Amount = item.Amount   AmountToAdd : item.Amount);
  
 console.log(data);