Я работаю над методами StateService, которые перемещают карточку задачи в следующий столбец. Мне удалось написать метод taskMoveLeft
, который прекрасно работает, но я не могу продублировать его функциональность для метода taskMoveRight
, используя цикл forEach
, я могу заставить его работать только с циклом for
.
Рабочий пример метода taskMoveLeft
(с использованием forEach
):
taskMoveLeft(id) {
state.columns.forEach((column, columnIndex) => {
if (state.columns[0] !== column) {
if (column.cards) {
column.cards.forEach((card, cardIndex) => {
if (card.id === id) {
if (state.columns[columnIndex - 1].cards) {
// Add card to the target column card collection
state.columns[columnIndex - 1].cards.push(card);
} else {
// Create target column card collection and add card
state.columns[columnIndex - 1].cards = Array.of();
state.columns[columnIndex - 1].cards.push(card);
}
// Remove the card from the source column card collecion
state.columns[columnIndex].cards.splice(cardIndex, 1);
}
});
}
}
});
}
Рабочий пример метода taskMoveRight
(с использованием цикла for
):
taskMoveRight(id) {
for (let i = 0; i < state.columns.length; i++) {
if (state.columns[state.columns.length - 1] !== state.columns[i]) {
if (state.columns[i].cards) {
for (let j = 0; j < state.columns[i].cards.length; j++) {
if (state.columns[i].cards[j].id === id) {
if (state.columns[i + 1].cards) {
// Add card to the target column card collection
state.columns[i + 1].cards.push(state.columns[i].cards[j]);
} else {
// Create target column card collection and add card
state.columns[i + 1].cards = Array.of();
state.columns[i + 1].cards.push(state.columns[i].cards[j]);
}
// Remove the card from the source column card collecion
return state.columns[i].cards.splice(j, 1);
}
}
}
}
}
}
Невозможно заставить метод taskMoveRight
работать с циклом forEach
. С этим кодом карта всегда перемещается в самый дальний правый столбец:
taskMoveRight(id) {
state.columns.forEach((column, columnIndex) => {
if (state.columns[state.columns.length - 1] !== column) {
if (column.cards) {
column.cards.forEach((card, cardIndex) => {
if (card.id === id) {
// Create target column card collection
if (!state.columns[columnIndex + 1].cards) {
state.columns[columnIndex + 1].cards = Array.of();
}
// Add card to the target column card collection
state.columns[columnIndex + 1].cards.push(card);
// Remove the card from the source column card collecion
state.columns[columnIndex].cards.splice(cardIndex, 1);
}
});
}
}
});
}