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

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; 

这样更好,因为哈希映射会节省您的时间和空间。

空间,因为您没有在向量中存储数百个“未定义”值。 时间,因为在许多情况下,用于访问元素的哈希函数被假装命中了正确的位置。

【讨论】:

我认为undefineds 实际上并没有保存在数组中,而是在读取数组时对其进行评估。但时间似乎是一个关键词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 属性确实有效。如何以人的方式完成?

以上是关于将表行索引存储为数组索引的主要内容,如果未能解决你的问题,请参考以下文章

Sqlserver 索引

MySQL索引是怎么支撑千万级表的快速查找(一.外存储器-磁盘)

mysql 高级学习笔记

R 和 MongoDB:数组存储为以索引为键的对象

数据库索引是什么

OpenGL 顶点数组对象是存储顶点缓冲区名称和索引,还是只存储索引?