Json对象拆分为json字符串

时间:2014-06-26 13:46:20

标签: javascript jquery

以下数据是我的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] //每个属性的计数

请帮帮我。我是这个领域的新手。否则减少最大的no.of循环。

3 个答案:

答案 0 :(得分: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);
});

答案 1 :(得分: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

答案 2 :(得分: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]}))

Forth array:

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

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