繁体   English   中英

JSON数组元素作为单个数组

[英]JSON array elements as individual array

说我有一个像下面这样的JSON

[{
    "name": "name1",
    "custitem_color": "3",
    "custitem_ribbon": "1",
    "baseprice": "10.00",
    "cost": "12.00"
}, {
    "name": "name2",
    "custitem_color": "4",
    "custitem_ribbon": "2",
    "baseprice": "20.00",
    "cost": "15.00"
}, {
    "name": "name3",
    "custitem_color": "6",
    "custitem_ribbon": "3",
    "baseprice": "30.00",
    "cost": "22.00"
}, {
    "name": "name4",
    "custitem_color": "8",
    "custitem_ribbon": "4",
    "baseprice": "40.00",
    "cost": "18.00"
}]

我想将输出生成为波纹管

"name": ["name1","name2","name3"],  
"custitem_color":["3","4","6","8"]

我搜索了SO,但没有找到这种类型的匹配项。 我很好奇,是否知道有没有任何库或解决方法来将所有键的值作为单独的数组获取,就像我上面提到的那样。 任何建议或指向任何资源将不胜感激。

尝试这个

var result = {},
    len    = data.length, i, prop;

for (i = 0; i < len; i++) {
  for (prop in data[i]) {
    if (!result[prop]) {
      result[prop] = [];
    }

    result[prop].push(data[i][prop]);
  }
}

您可以通过两个循环来执行此操作。 一个遍历数组中的每个对象,另一个遍历每个单独对象的属性。 在这里,您可以构建一个包含分组值的新对象。 尝试这个:

var output = {};
for (var i = 0; i < data.length; i++) {
    for (var item in data[i]) {
        output[item] ? output[item].push(data[i][item]) : output[item] = [data[i][item]];
    }
}

小提琴的例子

这种方法的好处是完全不了解输入对象的格式。 如果添加新属性,或者格式是动态的,则代码无需任何更改。

这个怎么样

var a = [  {"name":"name1", "custitem_color":"3", "custitem_ribbon":"1", "baseprice":"10.00", "cost":"12.00"}, {"name":"name2", "custitem_color":"4", "custitem_ribbon":"2", "baseprice":"20.00", "cost":"15.00"}, {"name":"name3", "custitem_color":"6", "custitem_ribbon":"3", "baseprice":"30.00", "cost":"22.00"}, {"name":"name4", "custitem_color":"8", "custitem_ribbon":"4", "baseprice":"40.00", "cost":"18.00"} ]

var finalobj = {name : [],custitem_color : [],custitem_ribbon : [],baseprice : [],cost : []};
$.each(a,function(pos,val){
    finalobj.name.push(val.name);
    finalobj.custitem_color.push(val.custitem_color);
    finalobj.custitem_ribbon.push(val.custitem_ribbon);
    finalobj.baseprice.push(val.baseprice);
    finalobj.cost.push(val.cost);
})

console.log(finalobj);
var final_json = {"name":[],
           "custitem_color":[],
           "custitem_ribbon":[],
           "baseprice":[],
           "cost":[]
};

var init_json = [  {  
           "name":"name1",
           "custitem_color":"3",
           "custitem_ribbon":"1",
           "baseprice":"10.00",
           "cost":"12.00"
        },
        {  
           "name":"name2",
           "custitem_color":"4",
           "custitem_ribbon":"2",
           "baseprice":"20.00",
           "cost":"15.00"
        },
        {  
           "name":"name3",
           "custitem_color":"6",
           "custitem_ribbon":"3",
           "baseprice":"30.00",
           "cost":"22.00"
        },
        {  
           "name":"name4",
           "custitem_color":"8",
           "custitem_ribbon":"4",
           "baseprice":"40.00",
           "cost":"18.00"
        }
     ] ;


$.each(init_json ,function(pos,val){
    final_json.name.push(val.name);
    final_json.custitem_color.push(val.custitem_color);
    final_json.custitem_ribbon.push(val.custitem_ribbon);
    final_json.baseprice.push(val.baseprice);
    final_json.cost.push(val.cost);
})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM