我正在尝试动态更改JSON对象分组所依据的属性的值。例如,如果我的搜索条件是位置,我希望将员工的工作位置显示为关键字,将该位置中的雇员的数量显示为对,而位置是JSON中的属性之一。
这就是我到目前为止所做的。我能够根据位置及其作为键值对的计数对员工进行分组。
var rows = [
{
"empId": 1,
"empName": "aaa",
"skillSet": "JAVA",
"location": "chennai"
},
{
"empId": 2,
"empName": "bbb",
"skillSet": "Angular",
"location": "chennai"
},
{
"empId": 3,
"empName": "ccc",
"skillSet": "Angular",
"location": "chennai"
},
{
"empId": 4,
"empName": "ddd",
"skillSet": "JAVA",
"location": "bangalore"
},
{
"empId": 5,
"empName": "eee",
"skillSet": "JAVA",
"location": "chennai"
},
{
"empId": 6,
"empName": "fff",
"skillSet": "JAVA",
"location": "bangalore"
},
{
"empId": 7,
"empName": "ggg",
"skillSet": "oracle",
"location": "chennai"
},
{
"empId": 8,
"empName": "hhh",
"skillSet": "JAVA",
"location": "hyderabad"
},
{
"empId": 9,
"empName": "iii",
"skillSet": "JAVA",
"location": "hyderabad"
}
]
var occurences = rows.reduce(function (r, row) {
r[row.location] = ++r[row.location] || 1;
return r;
}, {});
var result = Object.keys(occurences).map(function (key) {
return { key: key, value: occurences[key] };
});
console.log(result);我的结果是
[{
"key": "chennai",
"value": 5
},
{
"key": "bangalore",
"value": 2
},
{
"key": "hyderabad",
"value": 2
}
]如你所见,我已经直接硬编码了位置
r[row.location] = ++r[row.location] || 1;取而代之的是,我想要动态地,就像我也应该能够使用其他属性,比如skillSet,对它进行分组。但是怎么做呢?
发布于 2019-10-23 13:37:21
创建一个接受参数keyName的函数并将其用作row[keyName]
var rows = [{"empId":1,"empName":"aaa","skillSet":"JAVA","location":"chennai"},{"empId":2,"empName":"bbb","skillSet":"Angular","location":"chennai"},{"empId":3,"empName":"ccc","skillSet":"Angular","location":"chennai"},{"empId":4,"empName":"ddd","skillSet":"JAVA","location":"bangalore"},{"empId":5,"empName":"eee","skillSet":"JAVA","location":"chennai"},{"empId":6,"empName":"fff","skillSet":"JAVA","location":"bangalore"},{"empId":7,"empName":"ggg","skillSet":"oracle","location":"chennai"},{"empId":8,"empName":"hhh","skillSet":"JAVA","location":"hyderabad"},{"empId":9,"empName":"iii","skillSet":"JAVA","location":"hyderabad"}]
function groupBy(keyName) {
console.log("Group By :: ", keyName)
var occurences = rows.reduce(function (r, row) {
r[row[keyName]] = ++r[row[keyName]] || 1;
return r;
}, {});
var result = Object.keys(occurences).map(function (key) {
return { key: key, value: occurences[key] };
});
console.log(result);
}
groupBy("location");
groupBy("skillSet");
发布于 2019-10-23 13:31:06
你可以这样做
function groupEmployees(employees, grpKey) {
const group = {};
employees.forEach(emp => group[emp[grpKey]] = group[emp[grpKey]] ? group[emp[grpKey]] + 1 : 1);
return group;
}
console.log(groupEmployees(rows, 'location')); // prints {chennai: 5, bangalore: 2, hyderabad: 2}
console.log(groupEmployees(rows, 'skillSet')); // prints {JAVA: 6, Angular: 2, oracle: 1}https://stackoverflow.com/questions/58515920
复制相似问题