Как вы перемещаете объект из одного массива в другой массив? - PullRequest
0 голосов
/ 03 октября 2019

Я пытаюсь переместить объект из одного массива в другой. Думайте об этом как о добавлении / перемещении друга из не-друга в друга. У меня есть два массива, которые можно увидеть ниже, и я пытаюсь переместить объект (то есть друга) из возможного в текущий. В приведенном ниже примере я пытаюсь переместить Паркер с возможного на текущий.

state = {
    current: [
        {
            id: 1,
            name: 'peter'
        }
    ],
    possible: [
        {
            id: 2,
            name: 'parker'
        }
    ]
}


function addFriend(state, action) {
  const { current, possible } = state;
  const addedFriend = Object.assign(
    {},
    state.possible.splice(action.payload.index, 1)
  );

  current.push(addedFriend);

  const newState = { current, possible };
  return newState;
}

В настоящее время объект AddedFriend перемещается, но он превращает ток в:

{ current: 
    [ 
    { id:1, name: 'peter' },
    { 0: { id:2, name: 'parker' }}
    ]
}

Ответы [ 2 ]

1 голос
/ 03 октября 2019

Поскольку вы можете удалить несколько элементов с помощью splice(), он возвращает массив. Индексируйте результат, чтобы получить конкретный объект. Вам не нужно использовать Object.assign(), это просто копирует значение (которое просто преобразует массив в объект, свойства которого являются индексами массива).

var state = {
    current: [
        {
            id: 1,
            name: 'peter'
        }
    ],
    possible: [
        {
            id: 2,
            name: 'parker'
        }
    ]
};

function addFriend(state, action) {
  const { current, possible } = state;
  const addedFriend = state.possible.splice(action.payload.index, 1)[0];

  current.push(addedFriend);

  const newState = { current, possible };
  return newState;
}

state = addFriend(state, {payload: { index: 0 }});
console.log(state);

Я не уверен, почему вы возвращаете новый state объект, поскольку вы изменяете старое состояние на месте.

0 голосов
/ 03 октября 2019

Это не так эффективно, если вам нужен быстро работающий код. Но это следует за неизменностью.

Мы просто игнорируем элемент из possible и добавляем его в current.

state = {
    current: [
        {
            id: 1,
            name: 'peter'
        }
    ],
    possible: [
        {
            id: 2,
            name: 'parker'
        }
    ]
}


function addFriend(state, action) {
  const { current, possible } = state;
  return {
    ...state,
    current: current.concat(possible[action.payload.index]),
    possible: possible.filter((_, index) => index !== action.payload.index)
  }
}

state = addFriend(state, {payload: {index: 0}})
console.log(state)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...