复制并更新数组中对象的 属性

Copy and Update a property of an object in an array

对于我使用 redux 的应用程序,我有一个数组,我想更新一个对象的一些属性。因为它是 redux 我需要数组的副本,所以我想使用展开运算符。

输入:

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" } ]

也许你应该使用 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" }

您正在尝试将数组散布到一个对象中并添加额外的键,以确保即将到来的输出是正确的。如果您想要所需的输出,则必须在使用扩展运算符之前使键相同,也就是说,如果您想要覆盖第 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);

输入和输出仍然是我关心的问题。您应该记住,一个对象不能有重复的键,但是一个数组可以多次具有相同的元素。根据你需要的输出,输入和解可以是这样的。

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);

使用 Shubham Gupta 的想法,而不是解构,我进行了对象分配并且似乎有效

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