2016-11-04 2 views
2

Я пытаюсь объединить массив объектов, с использованием объекта Object.assign()Merge массив объектов с объекта с использованием Object.assign

var state = { 
    items: [{ 
     id: "Harko", 
     name: "Haris" 
    }, 
    { 
     id: "Benko", 
     name: "Benjo" 
    }] 

} 

var a = { 
    id: "Benko", 
    name: "Bengalka" 
} 

То, что я пытался уже:

Object.assign(state.items,a); 
Object.assign({}, { items: [state.items,a]); 

Я хочешь получить следующий:

{ 
    items: [{ 
     id: "Harko", 
     name: "Haris" 
    }, 
    { 
     id: "Benko", 
     name: "Bengalka" 
    }] 
} 

Так что я хочу, чтобы объект в состоянии вара с идентификатором «Бенко» перезапись б y var a, потому что они имеют одинаковый идентификатор.

Возможно ли это с Object.assign?

Любая помощь будет оценена по достоинству.

Благодаря

ответ

4

Вы не можете сделать это на высшем уровне с использованием Object.assign. Что вам нужно сделать, это find ссылка на объект, а затем вы можете использовать Object.assign обновить его свойства:

const state = { 
 
    items: [{ 
 
     id: "Harko", 
 
     name: "Haris" 
 
    }, 
 
    { 
 
     id: "Benko", 
 
     name: "Benjo" 
 
    }] 
 

 
} 
 

 
const a = { 
 
    id: "Benko", 
 
    name: "Bengalka" 
 
} 
 
const foundObject = state.items.find(obj => obj.id === a.id); 
 
Object.assign(foundObject, a); 
 
console.log(state);

+0

Спасибо! Вот и все. –