одна строка ES6 измените один элемент в массиве

#ecmascript-6 #react-hooks

Вопрос:

У меня есть код для изменения состояния с помощью React

 const newArray = upfiles;  newArray[i] = { ...upfiles[i], status: 'Ready' };  setUpfiles([...newArray]);  

Интересно, можно ли это сделать в одну строку?

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

1. Обратите внимание, что newArray на самом деле это не новый массив. Литерал массива [... …] создает новый массив. Исправьте это сначала, прежде чем пытаться оптимизировать количество строк.

2. i Гарантируется ли наличие индекса в массиве (т. е. gt;= 0 и lt; upfiles.length )?

Ответ №1:

 setUpfile(Object.values({...upfiles, [i]:{...upfiles[i], status: "Ready"}}))  

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

Также

 setUpfile(upfiles.map((upfile, index) =gt; index === i ? {...upfile, status:"Ready"} : upfile))  

должно сработать