как выполнить конкатенацию с индексированными объектами в массиве - PullRequest
0 голосов
/ 09 июня 2018

enter image description here У меня есть редуктор, который изменяет структуру [{}] или [{}, {}] на [0: {}] или [0: {}, 1: {}]

после этого изменения я не могу согласиться с этим исходным массивом.Есть ли решение для этого случая?Я должен добавить, что действительно трудно изменить редуктор, чтобы он не генерировал измененную структуру массива (это мое мнение)

Я добавляю код редуктора:

import * as actionTypes from '../actions';
import {schema, normalize, arrayOf} from 'normalizr';
import _ from 'lodash';


const iniState = {
  recipes : []
}

function createRecipe(state = iniState, action) {
  switch (action.type) {
    case actionTypes.ADD_RECIPE:
      let newRecipe = {
        id: Math.floor(Math.random()*10000),
        re: action.payload.recipeInReducer,
        c: action.payload.compsInReducer
      }
      return {
        ...state,
        recipes: state.recipes.concat(newRecipe)
      }
      case actionTypes.EDIT_BOOLEAN:
      return {...state,
        recipes: {..._.map(state.recipes, recipe=>{
          if(recipe.id === action.payload.idFromRecipe){
            return Object.assign({}, recipe, {
              c: {..._.map(recipe.c, comp=>{
                if(comp.id === action.payload.idFromComp){
                  return {...comp,
                  toRecipe: !comp.toRecipe};
                }else{return comp}
              })
            }
            })
          } else{
            return Object.assign({}, recipe, {
              c: {..._.map(recipe.c, comp=>comp)}})
          }
        })
      }
}

 }
  return state;
}
export default createRecipe;

1 Ответ

0 голосов
/ 09 июня 2018

Вы можете преобразовать объект, используя Object.assign, который принимает ключи в качестве индексов для массива.

var object = { 0: { foo: 0 }, 1: { bar: 42 } },
    array = Object.assign([], object);
    
console.log(array);
...