javascript - 如何在字典末尾追加键值对?

标签 javascript html css object

我试图将 0 分配给每次单击,将 1 分配给每次双击,并记录点击和 map 中的位置。然而,即使我没有尝试对它们进行排序,这些键都是按升序排序的。有没有办法在确保所有点击都注册的同时添加以 1 或 0 作为值的位置键?我什至尝试使用 String(i) 将 key 转换为字符串。

这是我正在处理的元素的完整代码: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 值,就像使用普通对象一样。

关于javascript - 如何在字典末尾追加键值对?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54962599/

相关文章:

javascript - RegExp 问题 - 字符限制和空白忽略

javascript - 在 jQuery 数据表中禁用 ctrl+click 选择

javascript - 错误框 div 来来去去

html - 如果选中单选按钮则显示 div

php - 无法删除页脚中的列

css - 将星号添加到必填字段标签

javascript - CORS 的安全问题

javascript - JQUERY:在多个输入字段上应用相同的功能

javascript - 动画随机图像微调器

javascript - 通过 WKWebView 应用于 Javascript 的样式表在模拟器上工作,在设备上失败