将表格行索引作为数组索引存储

7

这是一个简单的函数:

selected_row = []; // global scope

function toggleRowNumber(rowIndex) {
  if(selected_row[rowIndex]) selected_row.splice(rowIndex, 1);
  else selected_row[rowIndex] = 1; 
}

使用方法

toggleRowNumber(50000); // click the row - write the index
toggleRowNumber(50000); // click the row again - remove the inxed

alert(selected_row.length);

50001 OK

非常棒的功能!

那么是否有一种直接写入/读取索引而不需要搜索/循环的方法呢?而且不需要像上面描述的那样费力吗。

谢谢。


实际上它alerts 50000,这是一个正确的值。你期望什么? - Teemu
是的,50000。我期望在切割后得到0。就像php一样。$arr[50000] = 1; print sizeof($arr); // 输出1 - kostya
е—ҜпјҢJSе’ҢPHPжҳҜдёҚеҗҢзҡ„зј–зЁӢиҜӯиЁҖгҖӮеҪ“spliceе°Ҷй•ҝеәҰдёә50001зҡ„ж•°з»„зј©зҹӯдёҖдёӘеҚ•дҪҚж—¶пјҢжҲ‘жңҹжңӣж–°зҡ„й•ҝеәҰдёә50000иҖҢдёҚжҳҜ0... - Teemu
1个回答

0

如果我理解正确的话,您想要存储和索引一个可以检查/设置项是否被选中的数据结构。如果是这样,您需要一个“键-值”数据结构。那么,为什么不使用map呢?

var selected_row = {};

function toggleRowNumber(rowIndex) {
if(selected_row[rowIndex]) selected_row[rowIndex] = 0; //or = undefined;
else selected_row[rowIndex] = 1; 
}

使用哈希映射会更好,因为它可以节省时间和空间。

  • 节省空间是因为你不需要在向量中存储数百个“未定义”的值。
  • 节省时间是因为哈希函数用于访问元素时,在许多情况下都能够命中正确的位置。

我认为undefined实际上并没有保存在数组中,而是在读取数组时进行评估。但是时间似乎是一个关键字在这里... - Teemu
谢谢回复。我是否应该完全删除elem,以便仅循环存在的元素? - kostya
想象一张有大量行的表格。选择了几行。用户点击了另外一行。为了取消之前选中的行,我需要循环整个表格来清除高亮类。但是使用selected_rows集合,我只需要检查选中行的数量并仅为它们切换类即可。所以我找到了https://dev59.com/X2015IYBdhLWcg3w9gjh。 - kostya
1
使用一个映射表(map = new Object() 或 map = {})唯一需要做的就是尝试访问元素。最初,对于任何键来说,它的值都是未定义的。如果你切换一个元素:map[rowIndex] = 1 - Pablo Francisco Pérez Hidalgo
谢谢,我已经用_this_解决了问题,但是obj给了我另一个愚蠢的问题。为了选择一系列表格行,我需要知道最后(可能还有第一个)添加到选择中的行。在数组中很简单,最后一个是:arr(arr.length-1),但是对象绕来绕去,不可能解决它们。实际上,它按预期工作:最后添加的项目在集合中占据最后一个位置。但是为了获取该最后一个索引,我被迫编写了荒谬的代码:for(var lastIndex in selected_row){}; 因为.length属性不起作用。有什么更人性化的方法吗? - kostya
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接