Javascript 从阵列克隆或复制对象,然后使用es6推送和重命名
我想有一个列表组件,它有操作编辑,复制或删除。 我已经选择了要克隆的id,但它没有推到项目旁边。 我正在使用es6 这是我的密码Javascript 从阵列克隆或复制对象,然后使用es6推送和重命名,javascript,reactjs,ecmascript-6,Javascript,Reactjs,Ecmascript 6,我想有一个列表组件,它有操作编辑,复制或删除。 我已经选择了要克隆的id,但它没有推到项目旁边。 我正在使用es6 这是我的密码 const [state, setState] = useState({ formList: [] }) const handleDuplicateItem = id => { const duplicateSource = [...state.formList]; const duplicateItem = duplicateSource.fin
const [state, setState] = useState({
formList: []
})
const handleDuplicateItem = id => {
const duplicateSource = [...state.formList];
const duplicateItem = duplicateSource.find(item => item.id !== id);
duplicateSource.push(duplicateItem);
setState({
...state,
formList: [duplicateSource],
});
};
<FormItemList
dataSource={state.formList}
/>
您希望副本位于您复制的项目旁边请注意,您现在有重复的id,并且在没有警告的情况下无法将数据映射到jsx 您可以使用reduce执行以下操作:
const handleDuplicateItem = id => {
setState({
...state,
formList: state.formList.reduce((result, item) => {
if (item.id === id) {
//push an extra shallow copy of the item to result
result.push({ ...item });
}
result.push(item);
return result;
}, []),
});
};
你什么意思不推旁边的项目?如果你的意思是重复项总是在数组的末尾,那就是推送的作用。@jornsharpe例如,[1,1,2,3]1是克隆项。那么为什么要推送呢?这总是增加了结局。看,例如。