在数组中以文本格式写入变量



我在数组中写入变量作为关键字时遇到问题

setOrderedItems((cartItem) => ({...cartItem, item.id: item.name}));

我试过{item.id}${item.id},但都不起作用。

const [orderedItems, setOrderedItems] = useState([]);
const handleOnChange = (item, eventStatus) => {
if(eventStatus){
setOrderedItems((cartItem) => ({...cartItem, [item.id]: item.name}));
}
}

该项是具有结构的单个项。

/* first item */ {id: 1, name: 'test1'} 
/* second item */ {id: 1, name: 'test2'} 
/* third item */ {id: 2, name: 'test3}

我想要实现的是{1: ['test1', 'test2'], 2: 'test3'}

如果item.id包含要用于创建的对象中的item.name值的key,请使用方括号:

setOrderedItems((cartItem) => ({ ...cartItem, [item.id]: item.name }))

更新:所以很明显,您想在同一个键下累积多个字符串值。更详细地说,从这些项目:

[
{ id: 1, name: 'test1' },
{ id: 1, name: 'test2' },
{ id: 2, name: 'test3' }
]

你想获得

{
1: ['test1', 'test2'],
2: ['test3']
}

这应该做到:

const [orderedItems, setOrderedItems] = React.useState({})
const data = [
{ id: 1, name: "test1" },
{ id: 1, name: "test2" },
{ id: 2, name: "test3" }
]
const addItem = React.useCallback(({ id, name }) => {
setOrderedItems({
...orderedItems,
[id]: [...(orderedItems[id] || []), name]
})
}, [])
data.forEach(addItem)
console.log(orderedItems)
/* 
{
1: ['test1', 'test2'],
2: ['test3']
}
*/

问题是您非法向密钥添加了id属性。

setOrderedItems((cartItem) => ({...cartItem, item:[{ id: item.name}]}));

最新更新