【问题标题】:Merge Array Properties into New Property as 'JSON String'将数组属性作为“JSON 字符串”合并到新属性中
【发布时间】:2018-03-22 15:43:28
【问题描述】:

我正在尝试将数组的属性合并为类似 JSON 的字符串作为新属性。

鉴于类似:

[{
   {
     "orderNo":"1",
     "description":"Item 1",
     "note": "Note 1"
   },
   {
     "orderNo":"2",
     "description":"Item 2",
     "note": "Note 2"
   },
   {
     "orderNo":"2",
     "description":"Item 3",
     "note": "Note 3"
   }
}]

并将其转换为:

[{
   '0':[
      {
         'orderNo':'1',
         'items': '[{"description":"Item 1", "note": "Note 1"}]'
      }
   ],
   '1':[
      {
         'orderNo':'2',
         'items': '[{"description":"Item 2", "note": "Note 2"}, {"description":"Item 3", "note": "Note 3"}]'
      }
   ]
}]

使用以下函数(由@Barmar 提供)我可以将单个属性累积到一个项目数组中(在本例中为itemId)。

var newData = [];
for (var i = 0; i < data.length; i++) {
  var orderNo = data[i].orderNo;
  if (!newData[orderNo]) { // Add new object to result
    newData[orderNo] = {
      orderNo: orderNo,
      items: []
    };
  }
  newData[orderNo].items.push('{"itemId":' + data[i].itemId + ',"description:"' + data[i].description); // how than this be converted into a string?
}

如何将多个属性串在一起并保持它们的关联,以便以后可以使用JSON.parse 对其进行解析?

【问题讨论】:

  • 这不清楚,因为没有模式。为什么"description":"Item 3"
  • 为什么在一个数组中有一个带有“数字”键的对象以零换行? O.o
  • 它有一个一致的模式
  • 是的,有一个错字。现在已在问题中更正。
  • @Andreas 这个模式是按照关系数据库中的订单号对订单商品进行分组的。

标签: javascript arrays json sorting


【解决方案1】:

一种可能的方法如下。我使用 Array.prototype.forEach

x1=[{0:[{time:"2018-02-20",description:"Item 1",note:"Note 1"}],1:[{time:"2018-02-21",description:"Item 2",note:"Note 2"},{time:"2018-02-21",description:"Item 3",note:"Note 3"}]}];
var y1={};

x1.forEach(function(x){  // iterate through array of object
  var index=0;
  for(var a in x){       // iterate through all keys of object
    var y={};
    x[a].forEach(function(e){ //iterate through inner array
      y["time"]=e.time;       //crate new object of desire value
      if(!y["items"]){
        y["items"]=[];
      }
      y["items"].push({'description':e["description"],'note':e["note"]});     //push object into items property of object
    });
    y1[Object.keys(x[a])[index++]]=y; // create final object property and value
  }
});

console.log(y1);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-04
    • 1970-01-01
    • 1970-01-01
    • 2016-10-31
    • 1970-01-01
    相关资源
    最近更新 更多