javascript - 如何在字典末尾附加键值对?
问题描述
我试图将 0 分配给每次单击,将 1 分配给每次双击,并记录点击和地图中的位置。但是,即使我没有尝试对它们进行排序,这些键也都是按升序排序的。有没有办法在确保所有点击都注册的同时添加 1 或 0 作为最后值的位置键?我什至尝试使用String(i)
.
这是我正在处理的项目的完整代码: Codesandbox
var lastClicked;
var map = {};
var grid = clickableGrid(20, 30, function(el, row, col, i, isDoubleClick) {
if (!isDoubleClick && !el.className) {
el.className = "clicked";
map[String(i)] = 0;
} else if (isDoubleClick && !el.className) {
el.className = "niclicked";
map[String(i)] = 1;
}
console.log(map);
});
document.body.appendChild(grid);
解决方案
事实上,当你迭代它们时,普通对象中的键的顺序被访问,并不能保证按插入顺序。具体来说,(当转换为数字时)是 32 位范围内的正整数的值,按数字顺序访问。
数组是一种替代方法,因为它们在使用push
. 缺点是它们不提供字典行为,您可以通过(原始)键找到条目。
如果您确实需要字典行为,同时需要插入顺序,那么Map
可以是一个解决方案:
var lastClicked;
var map = new Map; // <---
var grid = clickableGrid(20, 30, function(el, row, col, i, isDoubleClick) {
if (!isDoubleClick && !el.className) {
el.className = "clicked";
map.set(i, 0);
} else if (isDoubleClick && !el.className) {
el.className = "niclicked";
map.set(i, 1);
}
map.forEach((value, key) => console.log(key, value)); //<-- insertion order!
});
document.body.appendChild(grid);
您可以使用:map.get(key)
在恒定时间内获取给定键的 0/1 值,就像使用普通对象一样。
推荐阅读
- python - 出现奇怪的错误,告诉我它试图从空列表中弹出
- swift - 无法在 init() 中使用已定义的状态变量
- vb.net - 阅读电子邮件正文
- angular10 - Angular 自定义管道 - 多级过滤
- statistics - 伽马分布的 Fisher 信息
- c# - 为什么我的文本框中的数据绑定不起作用?
- c - 警告:函数“vasprintf”的隐式声明?
- c# - C# 将 DateTime 类型数据控制器传递给 webapi 服务方法问题
- vba - 如果找到零(0)值vba excel,文本框显示下一个值
- javascript - Javascript:为什么滚动高度值在 Chrome 和 Firefox 浏览器中不同?