javascript - 在字典数组中计算相同的值,当它添加到表中时
问题描述
我使用表格并在点击按钮后从 JS 文件创建表格。
当我点击按钮时,它会从字典中获取数据并添加到表中。
所以我有一些位置,如果我在表格中添加一个位置,并且当我第二次点击我收到相同的位置时,它的添加值 +1 到计数器。
var users = [{
name: "Name1",
id: "6183",
position: "Shift Leader",
cardId: "0"
}, {
name: "Name2",
id: "6686",
position: "Master",
cardId: "1"
}, {
name: "Name3",
id: "10526",
position: "Operator",
cardId: "2"
}, {
name: "Name4",
id: "10527",
position: "Operator",
cardId: "3"
}, {
name: "Name5",
id: "10433",
position: "Qualiti inspector",
cardId: "4"
}];
$('#plus-button').on('click', function() {
filterUsers(users)
});
function filterUsers(userData) {
var msg = window.prompt("Scan operato ID card", "");
$.each(userData, function(i, data) {
if (msg === data.cardId) {
groupData(data);
}
});
}
function groupData(data) {
var count = 0;
$('.positionUsers').show();
$(".positionUsers > tbody").append('<tr class="add"><td>' + data.position + '</td><td>' + count + '</td></tr>');
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button id="plus-button">
<p class="plus">+</p>
</button>
<table class="positionUsers hiden">
<thead>
<tr>
<th colspan="3">
Currently working at this station:
</th>
</tr>
</thead>
<tbody></tbody>
</table>
因此,如果我在表“运算符”中添加了一个运算符,然后再添加一个运算符,则计数 +1。
如果我添加相同的用户位置,则不允许添加到表中。
所以最后,当我点击加号时,它会检查表格上的所有数据,如果用户位置已经在表格中,它会被添加到计数器 +1
解决方案
所以首先你应该有一个变量来存储你的计数器。有2种不同的方式。您可以使用属性 count:0 扩展初始用户数组,也可以使用此属性创建另一个数组。之后我想提一下,每次要更新值时都必须清空表。请尝试我的工作示例:
var users = [{
name: "Name1",
id: "6183",
position: "Shift Leader",
cardId: "0"
}, {
name: "Name2",
id: "6686",
position: "Master",
cardId: "1"
}, {
name: "Name3",
id: "10526",
position: "Operator",
cardId: "2"
}, {
name: "Name4",
id: "10527",
position: "Operator",
cardId: "3"
}, {
name: "Name5",
id: "10433",
position: "Qualiti inspector",
cardId: "4"
}];
var usersCount = users.reduce((accumulator, c) => {
var a = accumulator.filter(user => user.position === c.position);
if(a.length > 0){
a[0].cardIds.push(c.cardId);
}else{
accumulator.push({position: c.position, cardIds: [c.cardId], count: 0});
}
return accumulator;
}, []);
$('#plus-button').on('click', function() {
const cardId = window.prompt("Scan operato ID card", "");
const filteredUsers = usersCount.filter(user => user.cardIds.indexOf(cardId) !== -1);
if(filteredUsers.length > 0){
filteredUsers[0].count++;
$(".positionUsers > tbody").empty();
usersCount.filter(user => user.count > 0).forEach(user => {
$(".positionUsers > tbody").append('<tr class="add"><td>' + user.position + '</td><td>' + user.count + '</td></tr>');
});
$('.positionUsers').show();
}else{
alert('This card id does not exists')
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button id="plus-button">
<p class="plus">+</p>
</button>
<table class="positionUsers hiden">
<thead>
<tr>
<th colspan="3">
Currently working at this station:
</th>
</tr>
</thead>
<tbody></tbody>
</table>
推荐阅读
- c++ - 错误 C2131:表达式在 VC 2017 中未计算为常量
- intellij-idea - 如何在“查找路径”功能中排除文件掩码中的某些文件?
- python - xonsh 中循环遍历文件行的最佳方法是什么?
- ios - Ipad 锁定/关闭后重新启动 ios 应用程序
- r - 计算多少行总和为零:导入数据的问题?
- firebase - 如何在 Firebase 上使用相同的匿名用户?
- rust - 如何将值从 Drop::drop() 的参数中移出?
- android - Android:有一个非侵入式活动透明/不可点击的活动正在运行
- batch-file - 在启动程序 B 时批量停止程序 A,在结束程序 B 时启动程序 A
- reactjs - 自定义选项卡 React native 避免重新渲染