【问题标题】:Does JQuery support Dictionaries (key, value) collection?JQuery 是否支持字典(键、值)集合?
【发布时间】:2011-07-21 02:32:06
【问题描述】:

JQuery 是否支持Dictionaries(key, value) 集合?

我想在一个结构体中设置以下数据

[1, false]
[2, true]
[3, false]

具有添加、查找、删除和更新的能力。

任何帮助!

【问题讨论】:

  • Javascript 的关联数组有什么问题?
  • 虽然 Javascript 支持字典类型的集合,但为什么不将值存储在数组中,因为您的键是数字的?
  • 您需要存储与 DOM 元素相关的数据还是一般情况下。为什么不能使用简单的 javascript 对象。如果需要针对特定​​ DOM 元素存储数据,您可以检查出api.jquery.com/jQuery.data
  • 可以使用 Javascript 的 JSON,作为对象数组 ([[1, false],[2, true],[3, false]]) 或键值关联 ([{"id": 1, "enabled": false},{"id": 2, "enabled": true},{"id": 1, "enabled": false}]) 存储所需的结构。但我不确定是否有内置的操作方法。
  • 我不知道我可以用 Javascript 做到这一点。我是初学者。非常感谢。

标签: javascript jquery collections dictionary


【解决方案1】:

不,jQuery 没有,但 Javascript 有。

只使用一个对象:

var dict = {
  "1" : false,
  "2" : true,
  "3" : false
};

// lookup:
var second = dict["2"];
// update:
dict["2"] = false;
// add:
dict["4"] = true;
// delete:
delete dict["2"];

【讨论】:

  • 非常感谢。小问题:我可以在没有值的情况下初始化它吗?
  • @John:是的,只需省略值:var dict = {};
  • 这不是hasOwnProperty 安全的。
  • @Guffa,基本上这是 JavaScript 的一个缺陷。解决此问题的唯一方法是包装对象并使用安全字典 API 来获取和设置键/值。 map 是一个 ES6 解决方案。 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
  • @user1928158:对象中不可能有重复的键。他们的键"2"只能有一个值,所以设置它会覆盖以前的值。如果您需要多个键值,请考虑使用数组作为值,即{ "1" : [ false ], "2": [ true, false ], "3" : [ false ] }。这当然涉及更多使用和操作对象的代码。另一种选择是使用对象数组,例如[ { key: "1", value: false }, { key: "2", value: true }, { key: "2", value: false }, { key: "3", value: false }, ].
【解决方案2】:

jQuery,不。但是 JavaScript 可以。 JavaScript 中只有两种结构,arraysobjects

对象可以用作字典,其中属性是“键”:

var dict = {
    1: true,
    2: true,
    3: false
};

对象的属性可以使用点符号obj.property(如果属性名称是有效标识符,上面使用的数字不是)或数组访问符号obj['property']

【讨论】:

  • 你不觉得console.log(dict.1) 是不可能写出来的吗,这很令人困惑,尤其是在以下情况下:var foo = {3: true, 2: true, 1: false}; console.log(foo[1]);
  • @CasparKleijne:不太确定您认为什么令人困惑。你的意思是它可能与数组混淆? Imo 应该始终知道自己正在处理哪种数据结构。
  • dict 中为现有密钥添加新条目的语法是什么?考虑到我想将"2" : "false" 添加到var dict = { "1" : false, "2" : true, "3" : false };
【解决方案3】:

您不需要单独的字典类,因为 Javascript 对象充当字典。看到这个:

var userObject = {}; // equivalent to new Object()
userObject["lastLoginTime"] = new Date();
alert(userObject["lastLoginTime"]);

全文在这里:http://msdn.microsoft.com/en-us/magazine/cc163419.aspx

【讨论】:

    【解决方案4】:

    使用纯 JavaScript,

    var myDictionary = new Object();
    myDictionary[1] = false;
    myDictionary[2] = true;
    myDictionary[3] = false;
    
    function look(i) { return myDictionary[i];}
    look(1); // will return false
    

    【讨论】:

      【解决方案5】:

      是的,您可以使用对象来执行此操作:

      var myDict = { 1:false , 2:true , 3:false };
      

      【讨论】:

      • dict 中为现有密钥添加新条目的语法是什么?考虑到我想将"2" : "false" 添加到var dict = { "1" : false, "2" : true, "3" : false };
      猜你喜欢
      • 2023-04-06
      • 2011-05-31
      • 2021-01-30
      • 2011-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-20
      相关资源
      最近更新 更多