使用对象中找到的键从对象列表中创建一个映射

时间:2013-07-23 10:36:45

标签: javascript underscore.js javascript-objects

基本上我有一个像这样的对象 -

var data= [ 
{ id: 1,
objectType: 'Workstation',
isUp: true 
},
{ id: 2,
objectType: 'Workstation',
isUp: true 
},
{ id: 3,
objectType: 'Workstation',
isUp: false 
},
{ id: 4,
  objectType: 'Workstation',
  isUp: true 
},
{ id: 5,
  objectType: 'Workstation',
  isUp: false 
},
{ id: 6,
  objectType: 'Server',
  isUp: true 
},
{ id: 7,
  objectType: 'Server',
  isUp: true 
},
{ id: 8,
  objectType: 'Server',
  isUp: false 
},
{ id: 9,
  objectType: 'Server',
  isUp: false 
}
]

其中“isUp”是在线或离线对象状态。

我想将其转换为 -

{
'Workstation':{online_count:3, offline_count:2},
'Server':{online_count:2, offline_count:2}
}

任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:1)

我找到了你的脚本:

var data= [ 
    { id: 1,
    objectType: 'Workstation',
    isUp: true 
    },
    { id: 2,
    objectType: 'Workstation',
    isUp: true 
    },
    { id: 3,
    objectType: 'Workstation',
    isUp: false 
    },
    { id: 4,
      objectType: 'Workstation',
      isUp: true 
    },
    { id: 5,
      objectType: 'Workstation',
      isUp: false 
    },
    { id: 6,
      objectType: 'Server',
      isUp: true 
    },
    { id: 7,
      objectType: 'Server',
      isUp: true 
    },
    { id: 8,
      objectType: 'Server',
      isUp: false 
    },
    { id: 9,
      objectType: 'Server',
      isUp: false 
    }
    ]
var finalData = new Array();
data.forEach(function (item) {
    var found = false;
    for (var i = 0; i < finalData.length; i++) {
        if (finalData[i].objType == item.objectType) {
            if (item.isUp)
                finalData[i].online_count++;
            else
                finalData[i].offline_count++;
            found = true;
        }
    }
    if (!found) {
        var newObj = new Object();
        newObj.objType = item.objectType;
        newObj.online_count = item.isUp ? 1 : 0;
        newObj.offline_count = item.isUp ? 0 : 1;        
        finalData.push(newObj);
    }    
});
console.log(finalData);

答案 1 :(得分:0)

我认为这样做会:

var result = {
    Workstation: {
        online_count: 0,
        offline_count: 0
    },
    Server: {
        online_count: 0,
        offline_count: 0
    }
};
data.forEach(function (item) {
    item.isUp ? result[item.objectType]['online_count']++ : result[item.objectType]['offline_count']++;
});