javascript 表示 Excel 这种行列式的数据结构用哪种对象合适?

2020-12-24 10:19:45 +08:00
 hahaFck

1.传统的 javascript

2.每一个单元格存在一个 object 数据。

3.根据行索引和列索引,可以快速的实现某个单元格的访问。

4.也可以快速的获得某一行的所有单元格数据。

需求是类似于一个二维表格,但是并不是所有的行,及列都是有数据的,比如第一行只有第一列有数据,第二行没有数据,没有数据的行及列不需要存储。

2180 次点击
所在节点    程序员
16 条回复
chogath
2020-12-24 10:25:46 +08:00
map
hahaFck
2020-12-24 10:29:05 +08:00
@chogath js 中的 map 是后来加的,用不了,但是可以用{}自己实现,就是不知道{}中的 key 访问时,是排序的。
waiaan
2020-12-24 10:31:03 +08:00
对象数组
lishen226
2020-12-24 10:33:47 +08:00
[{}] 或 [[{}]]
LiubaiQ
2020-12-24 10:54:52 +08:00
@hahaFck ES6 语法为啥不能用呢,可以用 bable 转成 ES5 代码
wxsm
2020-12-24 11:43:16 +08:00
@LiubaiQ 语法和 API 是两码事。

我觉得二维数组是最适合的。

[
[ {}, {}, {} ],
[ {}, {}, {} ]
]
wxsm
2020-12-24 11:44:21 +08:00
不需要存储的行列,undefined 占位就行
GrapeCityChina
2020-12-24 11:51:43 +08:00
用 double,尽量不要使用 object 。

关于这一点,刚好在前几天的 .NET 开发者大会上有过分享,视频回放地址: https://gcdn.grapecity.com.cn/forum.php?mod=viewthread&tid=85101&page=1&extra=#pid339024
renmu123
2020-12-24 11:55:01 +08:00
稀疏数组
no1xsyzy
2020-12-24 12:24:42 +08:00
如果需求没得缩水,那就稀疏表格吧
interface unit {data: any, down?: unit, right?: unit, coordinate: [number, number]}
interface row_index {down?: row_index, right?: unit, row_id: number}
// interface col_index {down?: unit, right?: col_index, col_id: number}
interface table {row_indices: row_index[] /*, col_indices: col_index[] */}
注释范围是列索引,看你这边似乎用不上。

Map 不适合 4.
zqx
2020-12-24 12:46:48 +08:00
二维数组好理解,读写都方便,想不到不用的理由
w292614191
2020-12-24 14:09:46 +08:00
数据存储挺简单,复杂的是行列的增删、拖拽、引用关系,要做大量的计算。
wzzzx
2020-12-24 14:14:16 +08:00
稀疏数组
hakono
2020-12-24 14:46:28 +08:00
那啥,提醒下 LS 的各位,LZ 这种涉及到数据表格的需要,不是一个简单的 Map 、数组就能胜任的
可以预见,LZ 的需求会渐渐增加——搜索某行,搜索某列,获取指定行数据,获取指定列数据,也有可能会有行列的互相计算

所以 LZ 需要的是一个类似 Python 中 pandas 的 Dataframe 库
搜了下,danfojs 应该符合 LZ 需求
zypy333
2020-12-24 15:26:55 +08:00
/t/693711 这个帖子里说 SpreadJS 用的是稀疏矩阵 它这好像是广告,细节也没说,仅供参考
jones2000
2020-12-24 16:31:03 +08:00
无效单元格 或 无效行都指向同一个全局变量不就可以了. 2 维数组只是存了一个引用

var g_nullitem={ IsNull:true };
var g_nullrow={IsNull:true}

[
[ {value:10}, {Value:20}, g_nullitem, g_nullitem,g_nullitem],
g_nullrow,
[ g_nullitem, {Value:20}, g_nullitem, g_nullitem,g_nullitem],
g_nullrow,
..............................
]

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/738483

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX