給定一個反應鉤子和一個具有陣列屬性的物件,我想找到一種方法來通過在特定屬性索引處使用擴展運算子來更新鉤子。這是一個示例,我想0在每個屬性中獲取陣列的索引并將其傳播
const [{ a, b, c }, setState] = useState({ a : 'x', b : 'x', c : 'y' })
const temp = {
a : ['x1', 'y1'],
b : ['x2', 'y2'],
c : ['x3', 'y3']
}
setState({...temp[0]})
/* Expected to be spread onto
* setState({
* a : 'x1',
* b : 'x2',
* c : 'x3'
* })
*/
我將如何實作這一目標?我是否在使用擴展運算子開始尋找錯誤的位置?
我嘗試過的事情
- 試圖調查,
.filter()但我無法讓它作業 - 嘗試使用
[0]位置和其他語法,但也沒有成功
uj5u.com熱心網友回復:
您可以映射Object.entries,然后將結果轉換為帶有Object.fromEntries.
const temp = {
a : ['x1', 'y1'],
b : ['x2', 'y2'],
c : ['x3', 'y3']
}
let res = Object.fromEntries(Object.entries(temp).map(([k,[v]])=>[k, v]));
console.log(res);
uj5u.com熱心網友回復:
你可以這樣嘗試:
const temp = {
a : ['x1', 'y1'],
b : ['x2', 'y2'],
c : ['x3', 'y3']
};
let obj = {};
Object.keys(temp).forEach(k=> obj[k] = temp[k][0]);
console.log(obj);
uj5u.com熱心網友回復:
我不知道如何使用擴展運算子來做你想做的事,但你可以用reduce來完成這個,比如
const temp = {
a : ['x1', 'y1'],
b : ['x2', 'y2'],
c : ['x3', 'y3']
};
const indexToGrab = 0;
const newState = Object.entries(temp).reduce((acc, currentEntry) => {
acc[currentEntry[0]] = currentEntry[1][indexToGrab];
return acc;
}, {});
//{a: 'x1', b: 'x2', c: 'x3'}
setState(newState);
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/445682.html
標籤:javascript 反应
