Задать вопрос
@maxduma16

Как заменить объект в массиве объектов без мутаций, без изменений индекса данного обектов?

У меня есть массив обектов. (И новый обектов.) Я хочу один из обектов массива заменить на новый. Но надо это сделать так чтобы порядок не менялся.

Этот массив перед тем как отображаться на UI на него применяется метод reverse() , но в State этот массив не перевернутый. То есть в action новый объект приходит из перевернутим индексом я так понимаю

Я пробивал:

//  вариант 1.  
      case SOME:
       return {
          ...state,
          array: [
              ...array.filter(p => p.id !== action.newObjectIndex), action.newObject
            ]
        };

      //  вариант 2. 
      case SOME:
       return {
          ...state,
            array: [
              ...array.splice(0, array.indexOf(action.object)),
              action.newObject,
              ...array.splice(array.indexOf(action.object) + 1) 
            ]
        };
      //  вариант 3. 
        case SOME:
      const newArray = array.reverse();
      const prev = newArray.slice(0, newArray.indexOf(action.object));
      const next = newArray.slice(newArray.indexOf(action.object) + 1);
       return {
          ...state,
            posts: [
              ...prev,
              action.newObject,
              ...next
            ]
        };
      //  вариант 4. 
      case SOME: 
      const oldArray = array.reverse();
      oldArray.map((p, index) => {
        if(index !== oldArray.indexOf(action.object)) {
          return p
        }
        return {
          ...p,
          ...action.newObject
        }

      })
       return {
          ...state,
            array: [
              ...array
            ]
        };
  • Вопрос задан
  • 3005 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
0xD34F
@0xD34F
return {
  ...state,
  array: state.array.map(n => n.id === action.newObject.id ? action.newObject : n),
};
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы