Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript对象-将对象数组与一些经典对象合并_Javascript_Ecmascript 6 - Fatal编程技术网

Javascript对象-将对象数组与一些经典对象合并

Javascript对象-将对象数组与一些经典对象合并,javascript,ecmascript-6,Javascript,Ecmascript 6,我正在尝试将javascript中的对象数组与一些经典对象合并。但是我得到了一个奇怪的大对象,有一些对象数组和一些单独的对象,如下所示: 这里是我要合并的两个对象: var object1 = { "5b7973bdce3eb938a6de86a3": { addAt: 1534727291296, quantity: 1 }, "5b7973bdce3eb938a6de86a5": { addAt: 1534727292889, quantity: 1 }, "5b7973bdc

我正在尝试将javascript中的对象数组与一些经典对象合并。但是我得到了一个奇怪的大对象,有一些对象数组和一些单独的对象,如下所示:

这里是我要合并的两个对象:

var object1 = {
  "5b7973bdce3eb938a6de86a3": { addAt: 1534727291296, quantity: 1 },
  "5b7973bdce3eb938a6de86a5": { addAt: 1534727292889, quantity: 1 },
  "5b7973bdce3eb938a6de86a7": { addAt: 1534727297106, quantity: 1 }
};

var object2 = [
  {
    id: "5b7973bdce3eb938a6de86a3",
    category: "main dish",
    ingredients:
      " Peeled groundnuts ↵ Onion, garlic, pepper, salt ↵ Vegetable oil ↵  Ground crayfish ↵  Meat",
    price: "5.50"
  },
  {
    id: "5b7973bdce3eb938a6de86a5",
    category: "entry",
    ingredients:
      "1.2kg (2.6 lbs) goat meat (cut with the skin) ↵ 2 …g spoon vegetable oil. ↵  Black pepper (optional)",
    price: "6.50"
  },
  {
    id: "5b7973bdce3eb938a6de86a7",
    category: "appetizers",
    ingredients:
      "2 cups of warm water. ↵   2 tsp. baking powder. ↵ …ar. ↵    2 tsps. vegetable oil. ↵  Pinch of salt.",
    price: "5.00"
  }
];
预期结果:

       // for each object, merge addAt and quantity with previous object
       {
        id: "5b7973bdce3eb938a6de86a7",
        category: "appetizers",
        ingredients:
          "2 cups of warm water. ↵   2 tsp. baking powder. ↵ …ar. ↵    2 tsps. vegetable oil. ↵  Pinch of salt.",
        price: "5.00",
        quantity: 1,
        addAt: 1534727297106 
      }
从my console.log获得的结果:

// one big object, not merged
{
0:
{id: "5b7973bdce3eb938a6de86a3", category: "main dish", ingredients: " Peeled groundnuts ↵ Onion, garlic, pepper, salt, maggi ↵ Vegetable oil ↵  Ground crayfish ↵  Meat", price: "5.50", …}
1:
{id: "5b7973bdce3eb938a6de86a5",  category: "entry", ingredients: "1.2kg (2.6 lbs) goat meat (cut with the skin) ↵ 2 …g spoon vegetable oil. ↵  Black pepper (optional)", price: "6.50", …}
2:
{id: "5b7973bdce3eb938a6de86a7", category: "appetizers", ingredients: "2 cups of warm water. ↵   2 tsp. baking powder. ↵ …ar. ↵    2 tsps. vegetable oil. ↵  Pinch of salt.", price: "5.00", …}

5b7973bdce3eb938a6de86a3:
{addAt: 1534727291296, quantity: 1}

5b7973bdce3eb938a6de86a5:
{addAt: 1534727292889, quantity: 1}

5b7973bdce3eb938a6de86a7:
{addAt: 1534727297106, quantity: 1}
}
对象2=

到目前为止,我已经尝试了这些不同的方法:

Object.keys(this.props.data.compilation).map((key, index) => {
  if(this.props.data.compilation[key] === this.props.articles[index]) { 
    this.props.data.compilation[index].quantity = this.props.articleID[key]["quantity"] 
    return compilation = Object.assign({}, this.props.data.compilation[key], {
      quantity : this.props.articles[index][quantity] 
    }, { 
      addAt: this.props.articles[index][addAt]
    })
  }
})

Object.keys(this.props.data.compilation).map((key, index) => {
  if(this.props.data.compilation[key] === this.props.articles[index]) { 
    this.props.data.compilation[index].addAt = this.props.articleID[key]["addAt"], 
    this.props.data.compilation[index].quantity = this.props.articleID[key]["quantity"] 

  }
})

// lodash method
var compilation = _.merge( {},  this.props.data.compilation, this.props.articles)


//lodash method
var compilation = _.assign( {},  this.props.data.compilation, this.props.articles) 
他们中没有一个能像我那样工作。 为什么我的对象不能正确合并?任何暗示都很好, 谢谢。

只需将object2映射到一个新的对象数组中即可。对于object2中的每个对象,创建一个新对象,该对象与使用id属性检索的object1中的等效对象相融合:

var result = object2.map(o => Object.assign({}, o, object1[o.id]));
例如:

var object1={5b7973bdce3eb938a6de86a3:{addAt:1534727291296,数量:1},5b7973bdce3eb938a6de86a5:{addAt:1534727292889,数量:1},5b7973bdce3eb938a6de86a7:{addAt:1534727297106,数量:1}; var object2=[{id:5b7973bdce3eb938a6de86a3,类别:主菜,配料:去皮花生↵ 洋葱、大蒜、胡椒、盐↵ 植物油↵ 小龙虾↵ 肉,价格:5.50},{id:5b7973bdce3eb938a6de86a5,类别:入口,成分:1.2kg 2.6磅带皮山羊肉↵ 2…g匙植物油。↵ 黑胡椒可选,价格:6.50},{id:5b7973bdce3eb938a6de86a7,类别:开胃菜,配料:2杯温水。↵ 2茶匙发酵粉。↵ …应收账。↵ 2茶匙植物油。↵ 一撮盐,价格:5.00}]; var result=object2.mapo=>Object.assign{},o,object1[o.id]; console.logresult 只需将object2映射到一个新的对象数组中。对于object2中的每个对象,创建一个新对象,该对象与使用id属性检索的object1中的等效对象相融合:

var result = object2.map(o => Object.assign({}, o, object1[o.id]));
例如:

var object1={5b7973bdce3eb938a6de86a3:{addAt:1534727291296,数量:1},5b7973bdce3eb938a6de86a5:{addAt:1534727292889,数量:1},5b7973bdce3eb938a6de86a7:{addAt:1534727297106,数量:1}; var object2=[{id:5b7973bdce3eb938a6de86a3,类别:主菜,配料:去皮花生↵ 洋葱、大蒜、胡椒、盐↵ 植物油↵ 小龙虾↵ 肉,价格:5.50},{id:5b7973bdce3eb938a6de86a5,类别:入口,成分:1.2kg 2.6磅带皮山羊肉↵ 2…g匙植物油。↵ 黑胡椒可选,价格:6.50},{id:5b7973bdce3eb938a6de86a7,类别:开胃菜,配料:2杯温水。↵ 2茶匙发酵粉。↵ …应收账。↵ 2茶匙植物油。↵ 一撮盐,价格:5.00}]; var result=object2.mapo=>Object.assign{},o,object1[o.id];
console.logresult;好的,我把我的代码片段放在可运行状态,然后您可以在这里查看从我的console.log中获取的对象,然后添加方法。this.props.data.compilation和this.props.articles都是对象数组吗?你想合并它们吗?另外请提供一个对象/数组的示例,以及它们合并所需的输出。我已经更新了我的沙盒。好的,我会在我的帖子中放一些例子,不,我认为有一个对象有几个对象,还有一个数组对象好的,我把我的代码片段放在runnable中,然后你可以从这里开始查看对象,我从我的console.log中获取,然后我添加方法。this.props.data.compilation和this.props.articles都是对象数组吗?你想合并它们吗?另外请提供一个对象/数组的示例,以及它们合并所需的输出。我已经更新了我的沙盒。好的,我会在我的帖子里放一些例子,不,我认为有一个对象有几个对象,还有一个数组对象