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

时间:2018-09-21 10:52:08

标签: javascript redux spread-syntax

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

输入:

Number of leading zeroes = 9 - digits in num

我尝试过的事情:

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

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

您正在尝试将数组扩展到一个对象中,并添加其他正确输入的键。如果要获得所需的输出,则必须在使用扩展运算符之前使键相同,即,如果要覆盖对象在第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);

答案 2 :(得分:1)

使用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

答案 3 :(得分:0)

输入和输出仍然对我很重要。您应该记住,一个对象不能有重复的键,但是一个数组可以多次具有相同的元素。根据您所需的输出,输入和解决方案可以采用这种方式。

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