Скопируйте и обновите свойство объекта в массиве - PullRequest
0 голосов
/ 21 сентября 2018

Для моего приложения, использующего избыточность, у меня есть массив, и я хочу обновить некоторые свойства одного объекта.Из-за избыточности мне нужна копия массива, поэтому я хочу использовать оператор распространения.

Ввод:

const original = [{a: "original a", b: "original b"}, {c: "original c", d: "original d"}];

Что я пробовал:

const output = [...o1, Object.assign({}, o1[0], { a: "new value" })];
console.log(o2);

Вместо обновления первого объекта в массиве это добавляет новый объект в массив.

//what I want to be the output
[{ a: "updated a", b: "updated b" },{ c: "original c", d: "original d" } ]

Ответы [ 4 ]

0 голосов
/ 21 сентября 2018

используя идею Шубхам Гупты, вместо деструктуризации я пошел на присвоение объекта и, кажется, работает

const o1 = [
  { a: "original a", b: "original b" },
  { c: "original c", d: "original d" }
];

const updatedObj = [
  { a: "updated a",
    b: "updated b"
  }
];

const o2 = Object.assign(o1,updatedObj);
console.log(o2);

пример кода здесь https://codepen.io/anon/pen/XPGgGm?editors=0010

0 голосов
/ 21 сентября 2018

Вы пытаетесь распределить массив в объект и добавляете дополнительные ключи, для которых поступающий вывод верен.Если вы хотите получить желаемый результат, вам придется сделать ключи такими же, прежде чем использовать оператор распространения, то есть если вы хотите переопределить ключи объекта в 0-й позиции, вам придется объединить его с массивом объекта, элемент которого в 0-й позициипереопределяет ваши ключи.

const o1 = [
  { a: "original a", b: "original b" },
  { c: "original c", d: "original d" }
];

const updatedObj = [
  {
    a: "updated a",
    b: "updated b"
  }
];
const mergeObj = { ...o1, ...updatedObj };
const o2 = Object.values(mergeObj);
console.log(o2);
0 голосов
/ 21 сентября 2018

Вход и выход все еще беспокоит меня.Следует помнить, что объект не может иметь дубликат ключа, однако массив может иметь один и тот же элемент несколько раз.Исходя из вашего требуемого результата, ввод и решение могут быть такими:

const o1 = {a: "original a", b: "original b"};
const o2 = {c: "original c", d: "original d"};
const o3 = {a: "updated a", b: "updated b"};

o4 = {...o1, ...o2, ...o3};
console.log(o4);
0 голосов
/ 21 сентября 2018

Возможно, вам следует использовать Object.assign

Object.assign используется для замены некоторых свойств объекта:

// example object
let obj = { a: "original", b: "original" };

// use object.assign to create a new updated object 
// maybe you want to update `a` property
let updated_obj = Object.assign({}, obj, { a: "new value });

console.log(updated_obj); //{ a: "new value", b: "original" }
...