2016-04-10 192 views
0

我有一个来自数据库的JSON数组,我想操纵它。目前它具有谨慎的8个元素,我希望数组操作它以获得2个元素,其余元素将被嵌套。我现在的JSON具有这样的结构:操纵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 
    }, 
} 

我使用的每一个循环,但是这是建立单独的元素,我只想要结果数组中的两个元素。 任何解决方案,将不胜感激。

+3

您所需/输出的'data-structure/schema'似乎格式错误。请纠正它。它应该是'[{“type”:“A”,“desc”:[{...},{...}]},{...}]'? – sarbbottam

回答

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/

0

在y中有一些语法错误我们的代码,因为您使用{}Array s和Object s,所以我会从上下文中猜测。您需要几个循环才能使数据看起来完全符合您的要求。

请参阅JSFiddle