2014-06-26 193 views
2

的下面数据是我的JSON对象JSON对象分成JSON字符串

var column = { 
    "SNo": [{ "group": "true", "sort": "true", "filter": "true", "type": "number", "min": 1, "max": 1000, "format": "{0:c}"}], 
    "Name": [{ "group": "true", "sort": "true", "type": "string", "columnmenu": "true"}], 
    "City": [{ "group": "true", "type": "number", "filter": "true", "width": "100px", "columnmenu": "false"}] 
}; 

我需要上面的数据分割成阵列列表,而无需循环

第一阵列列表:["SNo", "Name", "City"]

第二阵列列表:["group", "sort", "filter", "type", "min", "max", "format", "group", "sort", "type", "columnmenu", "group", "type", "filter", "width", "columnmenu"]

第三阵列列表:["true", "true", "true", "number", 1, 1000, "{0:c}", "true", "true", "string", "true", "true", "number", "true", "100px", "false"]

第四个数组列表:[7, 4, 5] //每个属性的数量

请帮帮我。这个领域是新的。否则减少循环的最大数量。

+4

什么是与循环的问题? –

+0

我认为从他的最后一行开始,他对循环没有任何问题。他只想要最低限度没有。循环。 –

+1

这是一个JavaScript对象,而不是JSON。 –

回答

1

在这里,我也得到了一些工作的时候,你可以在多个键列对象。

var first_array = Object.keys(column); 
var second_array = []; 
var third_array = []; 
var fourth_array = []; 

first_array.forEach(function(inner_key){ 
    var keysInInnerKey = Object.keys(column[inner_key][0]); 
    var valuesInInnerKey = keysInInnerKey.map(function(key){ 
     return column[inner_key][0][key]; 
    }); 
second_array = second_array.concat(keysInInnerKey); 
third_array = third_array.concat(valuesInInnerKey); 
fourth_array.push(keysInInnerKey.length); 
}); 
0

DEMO

第一阵列:

Object.keys(column) 

第二阵列:

Object.keys(column['SNo'][0]) 
.concat(Object.keys(column['Name'][0])) 
.concat(Object.keys(column['City'][0])) 

第三阵列:

Object.keys(column['SNo'][0]).map(function(k){return column['SNo'][0][k]}) 
.concat(Object.keys(column['Name'][0]).map(function(k){return column['Name'][0][k]})) 
.concat(Object.keys(column['City'][0]).map(function(k){return column['City'][0][k]})) 

第四阵列:

Object.keys(column).map(function(k){return Object.keys(column[k][0]).length}) 

没有循环:)(不for至少....)

+0

感谢Kuf,但在第二和第三个数组中,您将名称命名为SNo,Name,City like,但我不知道此列名称,因为此数据动态来自数据库。请给一些其他备用解决方案。谢谢,并提前 – sona

+0

@Raviraj为什么你不能使用任何循环? – Kuf

1

由于您不知道对象键的值,也许一个简单的函数返回一组键或值可以做到这一点。

function getAll(obj, type) { 
    var arr = []; 
    for (var key in obj) { 
    if (type === 'keys') { 
     arr.push(key); 
    } else { 
     arr.push(obj[key]); 
    } 
    } 
return arr; 
} 

var one = getAll(column, 'keys'); 

您可以循环在第一数组中的元素得到填补阵列的其余部分:

var two = []; 
var three = []; 

for (var i = 0, l = one.length; i < l; i++) { 
    two.push.apply(two, getAll(column[one[i]][0], 'keys')); 
    three.push.apply(three, getAll(column[one[i]][0], 'values')); 
} 

DEMO