javascript - 按值分组的数据属性计算其他数据属性的总和
问题描述
我正在尝试计算huishoudens
每个provincie
. 对于这个问题,我创建了一个小提琴,可以在这里找到:http: //jsfiddle.net/Lyf1sak3/1/
使用此示例数据:
<div data-provincie="Noord-Holland" data-huishoudens="102"></div>
<div data-provincie="Noord-Holland" data-huishoudens="1250"></div>
<div data-provincie="Zuid-Holland" data-huishoudens="956"></div>
<div data-provincie="Zuid-Holland" data-huishoudens="235"></div>
<div data-provincie="Groningen" data-huishoudens="495"></div>
<div data-provincie="Groningen" data-huishoudens="55"></div>
<div data-provincie="Groningen" data-huishoudens="247"></div>
<div data-provincie="Utrecht" data-huishoudens="123"></div>
<div data-provincie="Utrecht" data-huishoudens="675"></div>
而这段代码:
var provincies = {},
provincie;
sum = 0;
$('*[data-provincie]').each(function(i, el){
provincie = $(el).data('provincie');
if (provincies.hasOwnProperty(provincie)) {
provincies[provincie] += 1;
sum += $(this).data('huishoudens');
}
else {
provincies[provincie] = 1;
}
});
// print results
$('#result').append('<hr>');
for(var key in provincies){
$('#result').append(key + ' (' + provincies[key] + '|' + sum + ')<br>');
}
我provincie
按自己的属性对每个属性进行分组,现在我只需要计算其他数据属性,但我完全被困在这里。我得到的结果要么675
是样本数据中的最后一个 div,要么我得到2462
了,但我不知道它是如何得到这个数字的。
我需要修改什么才能得到这个结果:
Noord-Holland (2|1352)
Zuid-Holland (2|1191)
Groningen (3|797)
Utrecht (2|798)
无论您给出什么答案都非常感谢,但请不要在需要硬编码provincie
类似名称的地方发布答案$('*[data-provincie="Noord-Holland"]');
解决方案
如果您知道provincie
之前只有您可以创建一个包含 all 的数组,provincie
然后您可以将其用作键来将其与所有div
if 匹配项进行比较,您可以将其添加到sum
变量中,最后将最终结果附加到您的result
div 中。
演示代码:
//all data provinces
//var json_ = ["Noord-Holland", "Zuid-Holland", "Groningen", "Utrecht"]
var json_ = [];
$('*[data-provincie]').each(function(i, el) {
//check if in array or not
if ($.inArray($(this).data('provincie'), json_) < 0) {
json_.push($(this).data('provincie'));//push same
}
});
console.log(json_)
sum = 0;
count = 0;
//loop through keys
for (var key in json_) {
$('*[data-provincie]').each(function(i, el) {
var provincie = $(el).data('provincie');
//if key matches
if (json_[key] == provincie) {
sum += $(el).data('huishoudens');
count++;
}
});
//append result
$('#result').append(count + ' (' + json_[key] + '|' + sum + ')<br/>')
count = 0;
sum = 0 //change sum to 0 again
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div data-provincie="Noord-Holland" data-huishoudens="102"></div>
<div data-provincie="Noord-Holland" data-huishoudens="1250"></div>
<div data-provincie="Zuid-Holland" data-huishoudens="956"></div>
<div data-provincie="Zuid-Holland" data-huishoudens="235"></div>
<div data-provincie="Groningen" data-huishoudens="495"></div>
<div data-provincie="Groningen" data-huishoudens="55"></div>
<div data-provincie="Groningen" data-huishoudens="247"></div>
<div data-provincie="Utrecht" data-huishoudens="123"></div>
<div data-provincie="Utrecht" data-huishoudens="675"></div>
<div id="result"></div>
推荐阅读
- html - 巨型菜单中的砌体式菜单栏
- django - Django 中的本地和产品 Settings.py
- spring-boot - 将数据索引到 AWS elasticsearch 服务时 Elasticsearch resthighlevelclient Noclassfound 错误
- php - PHP / XML - 未定义命名空间
- javascript - 从一个字符串中删除另一个字符串中包含的字符
- python - 在 spyder 中启动内核 ipython 控制台时出错
- vue.js - 带有mapGetter的VueJs元素选择列表不起作用
- ios - 如何使用 API 调用实现 XCUITest
- css - 如何在使用面板中的按钮时将切换图标保持在最右侧,PrimeNg
- c++ - 如何在静脉 omnet++ 中实现 V2I 通信?