【问题标题】:How do I create a sparse array in javascript through iteration?如何通过迭代在 javascript 中创建稀疏数组?
【发布时间】:2012-06-02 02:44:05
【问题描述】:

我编写这段代码是为了从一系列 dom 元素中抓取一个稀疏数组。 当在一维中完成时,代码可以工作,但在二维中它会失败。我有什么遗漏吗?

23         function initCellHover(){
24                 $cells.each(function(){
25                         var arrayX = $(this).position().left/cellWidth;
26                         var arrayY = $(this).position().top/cellHeight;
27                         var arrayValue = $(this);
28                         cellLookup[arrayX][arrayY] = arrayValue;
29                 });     
30         }  

【问题讨论】:

  • 这有什么问题?有任何错误信息吗?
  • 您的代码在这里看起来不错。您是否检查过和cellHeightcellWidth 的定义是否正确?它究竟是如何失败的?
  • Uncaught TypeError: Cannot set property '0' of undefined 是我得到的错误。如果我尝试 a = [[]]; 我会得到同样的错误a[1][22] = "测试";然而 b = [];b[22] = "测试";产生 [,,,,,,,,,,,,,,,,,,,,,,"test"]。其他两个属性都可以正常工作。我认为这是javascript如何处理嵌套数组的问题。如果是这种情况,我对解决方法比对问题的解决方案更感兴趣。

标签: javascript jquery multidimensional-array sparse-matrix


【解决方案1】:

在第 28 行中,您可能指的是未定义的属性。 检查数组中是否已经存在属性并在需要时添加它是有意义的:

cellLookup[arrayX] = cellLookup[arrayX] || [];
cellLookup[arrayX][arrayY] = arrayValue;

【讨论】:

  • 谢谢,这让我走上了正轨。我最终使用了 if(!cellLookup[arrayX]){ cellLookup[arrayX] = []}; if(!cellLookup[arrayX][arrayY]){ cellLookup[arrayX][arrayY] = []};cellLookup[arrayX][arrayY] = arrayValue;修复它。
猜你喜欢
  • 2019-02-10
  • 1970-01-01
  • 1970-01-01
  • 2021-10-17
  • 2018-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多