2017-06-21 5 views
1

In diesem @ngrx effects example, was funktioniert die reduce Funktion in der folgenden Zeile?Was bewirkt die Reduce-Funktion in diesem @ ngrx-Effektbeispiel?

const newBookEntities = newBooks.reduce((entities: { [id: string]: Book }, book: Book) => { 
     return Object.assign(entities, { 
      [book.id]: book 
     }); 
     }, {}); 

Kann nicht die newBooks anstelle von newBookEntities verwendet werden?

export function reducer(state = initialState, action: book.Actions | collection.Actions): State { 
    switch (action.type) { 
    case book.SEARCH_COMPLETE: 
    case collection.LOAD_SUCCESS: { 
     const books = action.payload; 
     const newBooks = books.filter(book => !state.entities[book.id]); 

     const newBookIds = newBooks.map(book => book.id); 
     const newBookEntities = newBooks.reduce((entities: { [id: string]: Book }, book: Book) => { 
     return Object.assign(entities, { 
      [book.id]: book 
     }); 
     }, {}); 

     return { 
     ids: [ ...state.ids, ...newBookIds ], 
     entities: Object.assign({}, state.entities, newBookEntities), 
     selectedBookId: state.selectedBookId 
     }; 
    } 

    case book.LOAD: { 
     const book = action.payload; 

     if (state.ids.indexOf(book.id) > -1) { 
     return state; 
     } 

     return { 
     ids: [ ...state.ids, book.id ], 
     entities: Object.assign({}, state.entities, { 
      [book.id]: book 
     }), 
     selectedBookId: state.selectedBookId 
     }; 
    } 

    case book.SELECT: { 
     return { 
     ids: state.ids, 
     entities: state.entities, 
     selectedBookId: action.payload 
     }; 
    } 

    default: { 
     return state; 
    } 
    } 
} 

Antwort

3

Es stellt sich dies:

[book1,book2,book3] 

In diese:

{ '1':book1, '2':book2, '3':book3 } 

Sie nicht gleich sind.