2017-02-18 32 views
0

我聚合json对象orderData,如果他们有相同的order_id。在最后一个对象ordernewdata null是在它的第二个索引,是一个空的对象被推入新的数组。我是什么失踪?Null在最终对象

var ordersData={ 
    "orders":[ 
    { 
     "order_id": 1, 
     "user_id": 294, 
     "amount": 500, 
     "discount": 100, 
     "created_at": "2016-11-07T07:36:46.000Z", 
     "item_name": "Veg Manchurian Dry", 
     "item_id": 1 
    }, 
    { 
     "order_id": 1, 
     "user_id": 294, 
     "amount": 500, 
     "discount": 100, 
     "created_at": "2016-11-07T07:36:46.000Z", 
     "item_name": "Veg Chopsuey", 
     "item_id": 2 
    }, 
     { 
     "order_id": 2, 
     "user_id": 294, 
     "amount": 500, 
     "discount": 100, 
     "created_at": "2016-11-07T07:38:42.000Z", 
     "item_name": "Veg Chopsuey", 
     "item_id": 2 
    }, 


    ] 
} 

    var ordersnewdata ={ 
    "orders":[ 
    { 
     "order_id": 1, 
     "user_id": 1, 
     "amount": 1, 
     "discount": 1, 
     "created_at": "", 
     "items":[] 
    } 
    ] 
    }; 


     var i=0; 
    for(k=i+1;k<ordersData.orders.length;k++){ 

     if(ordersData.orders[i].order_id==ordersData.orders[k].order_id){ 
      var item_name = ordersData.orders[k].item_name; 
      var item_id = ordersData.orders[k].item_id; 
      var obj  = {item_name:item_name,item_id:item_id}; 
      ordersnewdata.orders[i].items.push(obj);     
     } 

    else{ 

     var orders={ 
     order_id : ordersData.orders[k].order_id, 
     user_id  : ordersData.orders[k].user_id, 
     amount  : ordersData.orders[k].amount_id, 
     discount : ordersData.orders[k].discount_id, 
     created_at : ordersData.orders[k].created_at, 
     items  : {item_name:ordersData.orders[k].item_name,item_id:ordersData.orders[k].item_id}, 
     };  
     ordersnewdata.orders[k]=orders; 
    } 

    } 


console.log(JSON.stringify(ordersnewdata)); 
+0

希望这有助于https://jsfiddle.net/b7t3r4ae/ –

回答

0

在你的for循环,

K = 1,这是不言而喻的if语句中。当k = 2,它会进入其他分支,换句话说,ordersnewdata.orders[2] = orders为您的情况。所以我们忘了评估ordersnewdata.orders[1]。这就是为什么在ordernewdata.orders中会有null的原因。

要防止添加null,您可以使用ordersnewdata.orders.push(orders)插入新的订单。