代码之家  ›  专栏  ›  技术社区  ›  Storm

在这种情况下,数组大小在javascript中重要吗?

  •  6
  • Storm  · 技术社区  · 16 年前

    每当在页面上单击相应的按钮时,我都会使用数据库中的项id在javascript中创建一个数组。每个数组条目将存储一个自定义对象。

    所以数组中的第一个条目类似于arr[80123]。

    现在当我检查数组的长度时,它显示了80123!尽管其中只有1个元素,我也想过使用关联数组或字符索引数组,但它们缺少一些我需要的基本排序操作。

    现在我的问题是“如果数组中只有一个元素,但是数组的长度是80123,那么它实际会消耗多少内存?”

    更多信息。。。

    基数不断变化80123只是一个例子。

    function ToggleAction(actionButtonID, action) 
        {
            var extractedID = ExtractNumericIdFromTag(actionButtonID);
            var arrayIndexer = extractedID; // Can update this to make array associative
    
            if(actionItems[arrayIndexer] == null)
            {
                actionItems[arrayIndexer] 
                    = new ActionItem(extractedID, action);
            }
            else
            {
                var ai = actionItems[arrayIndexer];
                ai.action = action;
            }
        }
    
    6 回复  |  直到 16 年前
        1
  •  6
  •   Beska    16 年前

    你的代码没有分配那么多内存,所以你不必担心。Javascript数组足够聪明。但是,我仍然认为在这种情况下应该使用对象而不是数组。。。

    var num = 80123;
    var obj = {};
    obj[num] = { Name: "Josh" };
    
    alert(obj[80123].Name);
    
        2
  •  3
  •   jsight TaherT    16 年前

    Javascript中的数组只是具有一些特殊属性的散列(主要是“length”属性总是返回一个比最高整数键高的值)。

    我不相信任何一个实现都会仅仅因为你最初分配了一个非常高的索引而分配大量的内存。

        3
  •  1
  •   Maciek    16 年前

    var a = [];
    a[663] = "a";
    a.length == 664;
    

    这是回报

    true
    

    console.log(a)
    

    您将获得:

    [undefined, undefined, undefined,  ...... , undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, "a"]
    

    这会消耗多少内存可能与您使用的是哪个引擎有关,但它会消耗多少内存 就像有很多插槽被分配到没有价值。

    我认为您真正想要使用的只是这样一个简单的对象样式贴图:

    var a = {};
    a[664] = "a";
    a[323] = "b";
    a
    

    Object 664=a 323=b
    

    如果以后需要遍历此对象以访问所有对象,请使用以下代码:

    for(var id in a){
      if(a.hasOwnProperty(id)){
        console.log("id:",id," object:",a[id]);
      }
    }
    
        4
  •  0
  •   Braj    16 年前

    如何定义数组?如果你使用 Array a = [80123]; a = [80123,80124];

        5
  •  0
  •   Community Mohan Dere    9 年前

    Which takes less memory: a Javascript array or Javascript object?

    理论上,在Javascript中,数组 一个物体。数组中唯一(在内存中)改变的是.length属性。它将显示下一个最高的数组索引,但并不意味着数组中实际分配了那么多元素。

        6
  •  0
  •   Amarghosh    16 年前

    如果不是的话,我想您可以考虑根据id的最小值(在您的示例中是80123)更改数组的索引,以便数组索引从零开始。

    index = id - minID;