操纵JSON数组数据

时间:2016-04-10 04:51:46

标签: javascript arrays json

我有一个来自DB的JSON数组,我希望它可以操作。目前它有谨慎的8个元素,我希望数组操纵它来获得2个元素,其余的元素将被嵌套。我目前的JSON有这样的结构:

{
  "itemId": 1,
  "desc": [{
    "type": "A",
    "size": "xx",
    "count": 12,
    "price": 122
  },
  {
    "type": "A",
    "size": "xl",
    "count": 18,
    "price": 180
  },
  {
    "type": "B",
    "size": "xx",
    "count": 12,
    "price": 122
  },
  {
    "type": "B",
    "size": "xl",
    "count": 12,
    "price": 122
  }]
}

我希望操纵数据的方式如下:

{
 "type": "A",
  "desc":{
    "size": "xx",
    "count": 12,
    "price": 122
  },
  {
    "size": "xl",
    "count": 12,
    "price": 122
  },
 },
  {
 "type": "B",
  "desc":{
    "size": "xx",
    "count": 12,
    "price": 122
  },
  {
    "size": "xl",
    "count": 12,
    "price": 122
  },
 }

我正在使用每个循环,但这是创建单个元素,我只想在结果数组中有两个元素。 任何解决方案将不胜感激。

2 个答案:

答案 0 :(得分:1)

您可以尝试这样的事情:

var new_data = {
    A: {type: 'A', desc: []},
    B: {type: 'B', desc: []}
};

$.each(data.desc, function( index, value ) {
  new_data[value.type].desc.push(value);
});

https://jsfiddle.net/5cnaxn04/

如果您不知道将要获得的类型,可以动态构建对象:

var new_data = {};

$.each(data.desc, function( index, value ) {
  if(typeof new_data[value.type] === "undefined") {
    new_data[value.type] = {type: value.type, desc: [value]}
  } else {
    new_data[value.type].desc.push(value);
  }
});

https://jsfiddle.net/5cnaxn04/1/

答案 1 :(得分:0)

您的代码中存在一些语法错误,因为您{}Array都使用了Object,因此我会从上下文中猜测。您需要一些循环才能使数据完全符合您的要求。

请参阅JSFiddle