V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hahaFck
V2EX  ›  程序员

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

  •  
  •   hahaFck · 2020-12-24 10:19:45 +08:00 · 2381 次点击
    这是一个创建于 1431 天前的主题,其中的信息可能已经有所发展或是发生改变。

    1.传统的 javascript

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

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

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

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

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

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

    [
    [ {}, {}, {} ],
    [ {}, {}, {} ]
    ]
    wxsm
        7
    wxsm  
       2020-12-24 11:44:21 +08:00
    不需要存储的行列,undefined 占位就行
    GrapeCityChina
        8
    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
        9
    renmu123  
       2020-12-24 11:55:01 +08:00 via Android
    稀疏数组
    no1xsyzy
        10
    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
        11
    zqx  
       2020-12-24 12:46:48 +08:00 via Android
    二维数组好理解,读写都方便,想不到不用的理由
    w292614191
        12
    w292614191  
       2020-12-24 14:09:46 +08:00
    数据存储挺简单,复杂的是行列的增删、拖拽、引用关系,要做大量的计算。
    wzzzx
        13
    wzzzx  
       2020-12-24 14:14:16 +08:00
    稀疏数组
    hakono
        14
    hakono  
       2020-12-24 14:46:28 +08:00
    那啥,提醒下 LS 的各位,LZ 这种涉及到数据表格的需要,不是一个简单的 Map 、数组就能胜任的
    可以预见,LZ 的需求会渐渐增加——搜索某行,搜索某列,获取指定行数据,获取指定列数据,也有可能会有行列的互相计算

    所以 LZ 需要的是一个类似 Python 中 pandas 的 Dataframe 库
    搜了下,danfojs 应该符合 LZ 需求
    zypy333
        15
    zypy333  
       2020-12-24 15:26:55 +08:00
    /t/693711 这个帖子里说 SpreadJS 用的是稀疏矩阵 它这好像是广告,细节也没说,仅供参考
    jones2000
        16
    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,
    ..............................
    ]
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1017 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 23:04 · PVG 07:04 · LAX 15:04 · JFK 18:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.