从 JSON 创建对象数组
Create an array of Objects from JSON
我有一个 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) 类别类别 ii) 类别名称列表。例如:
this.CategoryClass = "CAT1"
this.CategoryNameList = ['B','C','E']
基本上我想 select 所有类别名称 class 是 CAT1 等其他类别 class。我试过这个:
var category = function(categoryClass, categoryNameList){
this.categoryClass = categoryClass;
this.categoryList = categoryNameList;
}
var categories = [];
categories.push(new category('CAT1',['B','C','E'])
需要帮助。
问题:基本上我想select所有类别名称class是CAT1等等其他类别class
解决方案:
function Select_CatName(catclass,array){
var CatNameList=[]
$(array).each(function(){
if(this.fields.category_class==catclass)
CatNameList.push(this.fields.category_name)
})
return CatNameList;
}
此函数 return 所需的类别名称列表,您需要传递所需的 catclass 和数据数组,因为在这种情况下它是您的 JSON.
输入:
以上函数调用:
输出 :
希望对您有所帮助。
您可以对数组使用简单的过滤器。您有一些双引号会导致您的代码出错。但是要仅使用 CAT1 进行过滤,您可以使用过滤方法
var cat1 = arr.filter( value => value.fields.category_class === "CAT1");
我建议使用这个 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']);
我有一个 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) 类别类别 ii) 类别名称列表。例如:
this.CategoryClass = "CAT1"
this.CategoryNameList = ['B','C','E']
基本上我想 select 所有类别名称 class 是 CAT1 等其他类别 class。我试过这个:
var category = function(categoryClass, categoryNameList){
this.categoryClass = categoryClass;
this.categoryList = categoryNameList;
}
var categories = [];
categories.push(new category('CAT1',['B','C','E'])
需要帮助。
问题:基本上我想select所有类别名称class是CAT1等等其他类别class
解决方案:
function Select_CatName(catclass,array){
var CatNameList=[]
$(array).each(function(){
if(this.fields.category_class==catclass)
CatNameList.push(this.fields.category_name)
})
return CatNameList;
}
此函数 return 所需的类别名称列表,您需要传递所需的 catclass 和数据数组,因为在这种情况下它是您的 JSON.
输入:
以上函数调用:
输出 :
希望对您有所帮助。
您可以对数组使用简单的过滤器。您有一些双引号会导致您的代码出错。但是要仅使用 CAT1 进行过滤,您可以使用过滤方法
var cat1 = arr.filter( value => value.fields.category_class === "CAT1");
我建议使用这个 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']);