将表行索引存储为数组索引
Posted
技术标签:
【中文标题】将表行索引存储为数组索引【英文标题】:Store a table row index as an array index 【发布时间】:2013-07-28 19:19:15 【问题描述】:有一个简单的功能:
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 好的
令人愉快的功能!
那么有没有一种方法可以直接写入|读取索引而无需任何搜索/循环?并且没有上面描述的这个巨大的壮举。
谢谢。
【问题讨论】:
其实alerts50000
是一个正确的值。你期待什么?
是的,50000。我希望拼接后为 0。它就像 php 一样。 $arr[50000] = 1;打印尺寸($arr); // 输出 1
嗯,JS 和 PHP 是不同的语言。当splice
将长度为 50001 的数组缩短 1 时,我希望新长度为 50000 而不是 0...
【参考方案1】:
如果我理解正确,您希望存储和索引可以检查/设置是否选择项目的位置。如果是这种情况,您正在寻找“键值”数据结构。那么,为什么不使用地图呢?
var selected_row = ;
function toggleRowNumber(rowIndex)
if(selected_row[rowIndex]) selected_row[rowIndex] = 0; //or = undefined;
else selected_row[rowIndex] = 1;
这样更好,因为哈希映射会节省您的时间和空间。
空间,因为您没有在向量中存储数百个“未定义”值。 时间,因为在许多情况下,用于访问元素的哈希函数被假装命中了正确的位置。【讨论】:
我认为undefined
s 实际上并没有保存在数组中,而是在读取数组时对其进行评估。但时间似乎是一个关键词here...
感谢您的回复。我应该完全杀死 elem 以仅循环通过存在的 sush 吗?
想象一下有大量行的表。选择了几行。用户点击了另一个。要取消选择以前选择的,我需要循环所有表以清除突出显示类。但是对于 selected_rows 集合,我只需要检查所选行的数量并仅为它们切换类。于是我找到了***.com/questions/6295087/remove-item-from-object
使用地图(map = new Object() 或 map = ; )唯一需要做的就是尝试访问元素。最初,对于任何键,其值是未定义的。如果您打开一个元素:map[rowIndex] = 1
谢谢,我已经用 this 管理了,但是 obj 给了我另一个愚蠢的问题。为了选择一系列表行,我需要知道添加到选择中的最后一行(也可能是第一行)。在数组中,它很简单,最后一个: arr(arr.length-1) 但围绕不可能的对象进行排序。在实践中,它按预期工作:最后添加的项目在集合中排在最后。但是为了获得最后一个索引,我不得不编写一个荒谬的代码:for(var lastIndex in selected_row);因为 .length 属性确实有效。如何以人的方式完成?以上是关于将表行索引存储为数组索引的主要内容,如果未能解决你的问题,请参考以下文章