javascript - Javascript检查二维数组更新中是否存在值,否则创建
问题描述
我正在为谷歌饼图
创建一个二维数组
数组必须是格式
[
//category, value
[2, 11],
[5, 2],
[6.6, 2],
[7.7, 2],
[8.8, 7]
]
我想要得到的是一个函数,其中类别被传递给函数。如果类别存在,则值以 1 (value++) 递增。如果没有,则应创建值为 1 的记录。
我为此在互联网上找到了部分解决方案,但我似乎无法使其工作。
我想我已经接近了,但我正在创建无限循环。如果有人能指出我正确的方向,那就太好了!(不需要以此为依据,我只需要一个简单明了的工作功能)
var array = [];
function updateArray(category) {
for (var z = 0; key = array[z]; z++) {
if (key.includes(category)) {
var value = key[1];
key[1] = [ category, value++ ];
console.log("category updated");
} else {
array.push( [ category, 1 ]);
console.log("category created");
}
}
}
编辑:起初数组是空的。
然后我读取了本地存储中与日期格式键 (DD-MM-YYYY) 匹配的每条记录,这里没有问题。
例如,在某个键的字段中遇到例如 5 时,数组应如下所示:
[
[5, 1]
]
当另外遇到 5、6、10 和 5 时,这应该是结果:
[
[5, 3],
[6, 1],
[10, 1]
]
希望这能让它更清楚。
解决方案
那里有几个问题:
您正在寻找 中的
category
任何地方,key
但您说只有子数组中的第一个条目用于类别(第二个用于值)。您正在
key[1]
使用新数组进行更新,而不仅仅是更新的值。如果键不包含类别,则您将推送到您正在循环的数组,因此假设类别不在您检查的第一个数组中,您将永远找不到它并且有一个无限循环。
我会把它分成几部分:
- 找到入口,然后
- 如果没有,请更新或添加一个
function updateArray(category) {
const entry = array.find(([cat]) => cat === category);
if (entry) {
// Update the value
++entry[1];
console.log("category updated");
} else {
// Add a new entry
array.push([category, 1]);
console.log("category created");
}
}
现场示例:
const array = [
//category, value
[2, 11],
[5, 2],
[6.6, 2],
[7.7, 2],
[8.8, 7]
];
function updateArray(category) {
const entry = array.find(([cat]) => cat === category);
if (entry) {
// Update the value
++entry[1];
console.log("category updated");
} else {
// Add a new entry
array.push([category, 1]);
console.log("category created");
}
}
console.log("Before:", JSON.stringify(array, null, 4));
updateArray(5); // Updates the second entry in the array
console.log("After: ", JSON.stringify(array, null, 4));
旁注:我还建议传递array
给函数,以便它可以重用,而不是关闭array
.
推荐阅读
- .net - .net core 2.1 VS 2017 basic web api 抛出“无法访问此站点”
- reactjs - React - 变量/范围问题
- html - css - div 顶部的 svg 圆角曲线形状
- excel - 双击可在表格列的顶部和底部之间跳转
- c - 使用类型转换将 char 数组分配给结构
- java - java中带茎的星形图案左帕斯卡箭头
- sql - 困难的 SQL Server 查询 - 将 12 小时时间转换为 24 小时时间
- javascript - AJAX 帖子不会使用 PHP Foreach 循环做复选框数组
- ios - 使用 AVAssetReader 读取 mp4 文件时丢失第一个音频 CMSampleBuffer
- javascript - 检测页面上的表单提交