【发布时间】:2018-06-02 10:35:42
【问题描述】:
我正在尝试解决此问题,但我有点卡住了,需要一些帮助/建议。我正在尝试更好地了解 es6,但我不知道解决问题的最佳方法是什么。
我正在获取一个大的 json,看起来有点像这样:
[
{
"company": "Google",
"location": "USA",
"email": null
},
{
"company": "Microsoft",
"location": "USA",
"email": "mail@mail.com"
},
{
"company": "Google",
"location": "NLD",
"email": "mail@mail.com"
}
]
我在表格中显示这些并想添加复选框过滤器,但我还想在它旁边添加一个计数,如下所示:
[x] Google (2)
[ ] Microsoft (1)
// other function call
[ ] mail@mail.com (2)
我有这个函数,我调用每个键(公司、位置、电子邮件):
function filterArr(data, key) {
data.forEach(element => {
let countedData = data.filter((el) => {
return el[key] == element[key]
}).length;
// console.log(element[key] + ": " + countedData);
});
data = data.filter((item, index, self) => self.findIndex( t => t[key] === item[key] && item[key] != null) === index )
// console.log(data)
return data;
}
filterArr(data, "company");
我试图用上述函数实现的输出是: 谷歌:2 微软:1
foreach 正确计算了键值,但显然记录了以下内容: 谷歌:2 微软:1 谷歌:2
过滤器 console.log 显示 Google 和 Microsoft(只要一次,就像我想要的那样 :)
现在我需要将这两个结合起来,但我不确定如何以及最好的方法是什么。 (见我的小提琴:https://jsfiddle.net/z359qo1d/)
你知道下一步该做什么吗?
【问题讨论】:
标签: javascript arrays filter ecmascript-6