从JSON创建一个对象数组

时间:2016-08-27 18:42:02

标签: javascript json jsonobject

我有一个类似下面的JSON文件:

[

{"fields":{category_class":"CAT2",category_name":"A"},"pk":1 },

{"fields":{category_class":"CAT1",category_name":"B"},"pk":2 },

{"fields":{category_class":"CAT1",category_name":"C"},"pk":3 },

{"fields":{category_class":"CAT2",category_name":"D"},"pk":4 },

{"fields":{category_class":"CAT3",category_name":"E"},"pk":5 },

{"fields":{category_class":"CAT1",category_name":"E"},"pk":6 },

]

我想从上面的JSON创建一个对象数组,它将具有两个属性。 i)CategoryClass ii)CategoryNameList。例如:

this.CategoryClass = "CAT1"
this.CategoryNameList = ['B','C','E']

基本上我想选择其类别类为CAT1的所有类别名称,依此类推其他类别类别。我试过这个:

var category = function(categoryClass, categoryNameList){

this.categoryClass = categoryClass;
this.categoryList = categoryNameList;

}

var categories = [];

categories.push(new category('CAT1',['B','C','E'])

需要帮助。

3 个答案:

答案 0 :(得分:1)

您可以在阵列上使用简单的过滤器。你有一些双引号会导致你的代码出错。但要仅使用CAT1过滤,您可以使用过滤方法

var cat1 = arr.filter( value => value.fields.category_class === "CAT1");

答案 1 :(得分:0)

问题:基本上我想选择类别类为CAT1的所有类别名称,依此类推其他类别类

解决方案

function Select_CatName(catclass,array){
  var CatNameList=[]
  $(array).each(function(){
  if(this.fields.category_class==catclass)
    CatNameList.push(this.fields.category_name)
 })
return CatNameList;
}

此函数返回所需类别名称列表,您需要传递所需的catclass和数据数组,因为在这种情况下它是您的JSON。

输入

enter image description here

以上功能调用

enter image description here

输出

enter image description here

希望它有所帮助。

答案 2 :(得分:0)

我建议使用这个ES6函数,它创建一个由类别键控的对象,为每个对象提供类别名称:

function groupByClass(data) {
    return data.reduce( (acc, { fields } ) => {
        (acc[fields.category_class] = acc[fields.category_class] || {
            categoryClass: fields.category_class,
            categoryNameList: []
        }).categoryNameList.push(fields.category_name);
        return acc;
    }, {} );
}

// Sample data
var data = [
    {"fields":{"category_class":"CAT2","category_name":"A"},"pk":1 },
    {"fields":{"category_class":"CAT1","category_name":"B"},"pk":2 },
    {"fields":{"category_class":"CAT1","category_name":"C"},"pk":3 },
    {"fields":{"category_class":"CAT2","category_name":"D"},"pk":4 },
    {"fields":{"category_class":"CAT3","category_name":"E"},"pk":5 },
    {"fields":{"category_class":"CAT1","category_name":"E"},"pk":6 },
];
// Convert
var result = groupByClass(data);
// Outut
console.log(result);
// Example look-up:
console.log(result['CAT1']);