Javascript 基于键值过滤json
我有下面的JSON数据。我想根据基于部门和员工的键值对进行筛选Javascript 基于键值过滤json,javascript,angularjs,Javascript,Angularjs,我有下面的JSON数据。我想根据基于部门和员工的键值对进行筛选 var data = { "Item": [ { "Fields": [ { "Key": "Title", "Value": "" }, { "Key":"Name",
var data = {
"Item": [
{
"Fields": [
{
"Key": "Title",
"Value": ""
},
{
"Key":"Name",
"Value":"Phani"
},
{
"Key":"Designation",
"Value":"Software Eng"
},
{
"Key":"Salary",
"Value":""
},
{
**"Key":"Section",**
"Value":"Employee"
}], "ItemName": "Test"
},
{
"Fields": [
{
"Key": "Title",
"Value": ""
},
{
"Key": "Name",
"Value": "Raju"
},
{
"Key": "Designation",
"Value": "Software Eng"
},
{
"Key": "Salary",
"Value": ""
},
{
"Key": "Section",
"Value": "Employee"
}], "ItemName": "Test"
},
{
"Fields": [
{
"Key": "Title",
"Value": ""
},
{
"Key": "DepName",
"Value": "Finance"
},
{
"Key": "DepType",
"Value": "Money"
},
{
"Key": "Salary",
"Value": ""
},
{
"Key": "Section",
"Value": "Department"
}], "ItemName": "Test"
},
{
"Fields": [
{
"Key": "Title",
"Value": ""
},
{
"Key": "DepName",
"Value": "IT"
},
{
"Key": "DepType",
"Value": "Tech"
},
{
"Key": "Salary",
"Value": ""
},
{
"Key": "Section",
"Value": "Department"
}], "ItemName": "Test"
}
]
};
在上面的json数据中,如果您在字段数组中观察,我有键值对
有一个名为Section及其值的键
我想根据部门筛选数据,就像我想列出所有员工和所有部门一样。对迭代感到困惑。你能帮个忙吗
我想要两个对象
var emps=[]
var deps=[]
这样我就可以像emp[“指定”]emp[“名称”]
dep[“DepName”]等这应该给你一个想法:
var firstFields = data.Item[0].Fields.map(function(field){
return { key: field.Key, value: field.Value };
});
console.log(firstFields);
map()
我将用一个关于如何区分员工和部门的示例进行更新
更新:
// filter out departments
var departments = data.Item.filter(function(item){
var section = item.Fields[item.Fields.length -1];
return section.Value === 'Department';
});
// flatten result:
deps = [];
for(var i = 0; i < departments.length; i++){
for(var j = 0; j < departments[i].Fields.length; j++){
deps.push({ key: departments[i].Fields[j].Key,
value: departments[i].Fields[j].Value })
}
}
console.dir(deps);
一种方法是:
var result = {};
data.Item.forEach(function(item){
var fields = item.Fields;
var res = {};
for(var i=0;i<fields.length;i++)
{
res[fields[i].Key] = fields[i].Value;
}
if(!result.hasOwnProperty(res.Section)){
result[res.Section] = [];
}
result[res.Section].push(res);
})
console.log(result);
您可以访问每个员工作为result.employee[i]。Title
和department作为result.department[0]。Title
,因此您想将其展平并获得键值对列表?您能发布您的预期输出吗?是的,我想根据节获取键值对,所有员工都应该进入一个阵列,所有部门都应该进入另一个阵列您的代码运行良好,但如果有多个部分,如硬件、内务管理,则会有多个条件,如果条件合适,该怎么办?我们可以重构这个吗?嗨,你的代码结合了这两个部门,应该是两个部门的数组departments@user804401基于此代码,您应该能够找到答案;)无论如何,我已经发布了一个例子
var result = {};
data.Item.forEach(function(item){
var fields = item.Fields;
var res = {};
for(var i=0;i<fields.length;i++)
{
res[fields[i].Key] = fields[i].Value;
}
if(!result.hasOwnProperty(res.Section)){
result[res.Section] = [];
}
result[res.Section].push(res);
})
console.log(result);
{ Employee:
[ { Title: '',
Name: 'Phani',
Designation: 'Software Eng',
Salary: '',
Section: 'Employee' },
{ Title: '',
Name: 'Raju',
Designation: 'Software Eng',
Salary: '',
Section: 'Employee' } ],
Department:
[ { Title: '',
DepName: 'Finance',
DepType: 'Money',
Salary: '',
Section: 'Department' },
{ Title: '',
DepName: 'IT',
DepType: 'Tech',
Salary: '',
Section: 'Department' } ] }