合并来自两个不同数组的两个对象

时间:2019-06-05 15:01:15

标签: javascript arrays object

我有两个数组,orderscartitems

我想创建一个包含两个数组信息的singel有效负载。使用Axios发布到我的API。

我尝试映射一个数组(因为我只需要另一个数组中的一项),然后尝试像这样将对象添加在一起:

const payload = []
let newArray = []

this.props.cartItems.map((item) => {
  let payloadobject = {
    productName: item.productname,
    amount: item.qty,
    price: item.price,
    order_id: this.props.cart.id,
  }

  newArray = appendObjTo(payload, payloadobject);
})

希望newArray将保留合并的组合数组。但是遇到错误:

  

找不到变量:appendObjTo

如何合并两个对象?它们各自位于自己的阵列中

编辑

当前数据结构

类别

cartItems Array [
  Object {
    "id": 2,
    "price": "6.50",
    "productname": "Baco",
    "qty": 2,

  }
]

订单

orders Array [
  Object {
    "id": 2,
  }
]

所需的输出

newArray Array [   对象{     “ id”:2     “ price”:“ 6.50”,     “ productname”:“ Baco”,     “数量”:2     “ order_id”:1(保留订单对象的ID),   } ]

1 个答案:

答案 0 :(得分:1)

由于未定义appendObjTo,因此收到错误消息。它不是标准函数,如果您自己定义了它,则可能在另一个作用域中。

您可以使用appendObjTo函数(MDN Reference)代替Object.assign。可以这样使用:

newArray = Object.assign({}, payload, payloadobject);

但是,您的代码中还有另一个错误。现在,您将每个组合对象分配给newArray,并在en处将保存最后一个组合对象,而不是数组。
您提供给map的lambda函数应返回一个新对象,该对象要替换新数组中的输入对象。当所有对象都通过map函数循环时,将返回一个新数组(MDN Reference)。在您的情况下,可以这样使用:

const payload = [];

let newArray = this.props.cartItems.map((item) => {
    let payloadobject = {
        productName: item.productname,
        amount: item.qty,
        price: item.price,
        order_id: this.props.cart.id
    };

    return Object.assign({ }, payload, payloadobject);
});

这将使newArray成为对象数组,其中每个对象都是整个payloadpayloadobject的组合。

希望这对您有帮助