Javascript 基于键值过滤json

Javascript 基于键值过滤json,javascript,angularjs,Javascript,Angularjs,我有下面的JSON数据。我想根据基于部门和员工的键值对进行筛选 var data = { "Item": [ { "Fields": [ { "Key": "Title", "Value": "" }, { "Key":"Name",

我有下面的JSON数据。我想根据基于部门和员工的键值对进行筛选

 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' } ] }