#arrays #typescript
Вопрос:
У меня есть массив объектов в react typescript. В каждой строке у меня есть кнопка повтора, я хочу скопировать данные из текущей строки и вставить их во все остальные оставшиеся строки.
Мне нужно написать функцию для моего компонента react typescript. На картинке вы можете видеть кнопку rpt, например, если у меня 5 строк, и я нажимаю кнопку rpt в 3-й строке, она принимает значение года и параметра и вставляет в 4-ю и 5-ю строки. Если я нажму кнопку rpt в 4-й строке, то она скопирует год и значение параметра из 4-й строки и вставит в 5-ю.
const repeatData = (index: number) => {
setSubjects((s) => {
const newState = [...subjects];
const clickedRow = { ...subjects[index] };
index = index 1;
while (index < subjects.length) {
const currentRow = { ...subjects[index] };
currentRow.Type = clickedRow.Type;
currentRow.Year = clickedRow.Year;
currentRow.Option = clickedRow.Option;
newState.splice(index, 1, currentRow);
}
return newState;
});
};
const repeatData = (event: SyntheticEvent, index: number) => {
setSubjects((s) => {
event.preventDefault();
const newState = [...subjects];
const clickedRow = { ...subjects[index] };
while (index < subjects.length) {
const currentRow = { ...subjects[index] };
index = index 1;
currentRow.Type = clickedRow.Type;
currentRow.Option = clickedRow.Option;
currentRow.Year = clickedRow.Year;
newState.splice(index, 1, currentRow);
}
return newState;
});
};
Комментарии:
1. что вы пробовали? можете ли вы показать нам свой код?
2. Я добавил свой код функции выше, пожалуйста, посмотрите.
3. Второй блок кода работает нормально. Я просто хочу проверить, есть ли какой-то более эффективный способ сделать это.
Ответ №1:
const repeatData = (event: SyntheticEvent, index: number) => {
setSubjects((s) => {
event.preventDefault();
const newState = [...subjects];
const clickedRow = { ...subjects[index] };
while (index < subjects.length) {
const currentRow = { ...subjects[index] };
index = index 1;
currentRow.Type = clickedRow.Type;
currentRow.Option = clickedRow.Option;
currentRow.Year = clickedRow.Year;
newState.splice(index, 1, currentRow);
}
return newState;
});
};
Комментарии:
1. Пожалуйста, добавьте дополнительные сведения, чтобы расширить свой ответ, например, ссылки на рабочий код или документацию.