【发布时间】:2021-01-28 22:21:15
【问题描述】:
我正在开发一个类似 Excel 的应用程序,但我遇到了多维数组的问题。
我有如下所示的列数组:
var columns = [
{A: {binding: "A",header: "A"},
{B: {binding: "B",header: "B"},
{C: {binding: "C",header: "C"}
];
然后我有一个数组表示每个单元格的值,如下所示:
var data = [
{A:"row 0 col A", B: "row 0 col B", C:"row 0 col C"},
{A:"row 1 col A", B: "row 1 col B", C:"row 1 col C"},
{A:"row 2 col A", B: "row 2 col B", C:"row 2 col C"}
];
columns 数组中对象的binding 属性将用于获取每一行的列值。
但是,在某些字母键的中间插入新列时,我遇到了问题。
假设我需要在列A 和列B 之间建立一个新列。结果如下所示:
var columns = [
{A: {binding: "A",header: "A"},
{B: {binding: "B",header: "B"},
{C: {binding: "C",header: "C"},
{D: {binding: "D",header: "D"}
];
它只是将新列推送到columns。
我想我必须在每一行的所有字母键之间插入一个新单元格/项目,并重命名所有键(在这种情况下,将键 B 重命名为 C,C 重命名为 D,等)。
我希望结果如下所示:
var data = [
{A:"row 0 col A", B:"new col inserted here", C:"row 0 col B", D:"row 0 col C"},
{A:"row 1 col A", B:"new col inserted here", C:"row 1 col B", D:"row 1 col C"},
{A:"row 2 col A", B:"new col inserted here", C:"row 2 col B", D:"row 2 col C"}
];
如果我要重命名所有这些键,我会担心性能问题,尤其是当我有 120 列 (A-DZ) 和 100 行时。
我有两个问题:
- 最有效的方法是什么?
- 如果我有很多行和列,重命名这些键时会出现性能问题吗?
【问题讨论】:
-
插入时,如何选择新的最右边的列名?这里是“D”,但在任意情况下如何确定呢?
-
我不会担心重命名 ~12K 键的性能,除非我测试并发现这是一个问题。我希望它很快。
-
@ScottSauyet 我使用此代码stackoverflow.com/questions/12504042/…,但我需要对其稍作修改,以便设置起始字符。示例:我希望函数从 char 'C' 开始增量
-
我知道您希望新列在 UI 中的 A 和 B 之间可见,但为什么需要在 A 和 B 之间显示它?你是用顺序索引来访问的吗?比如索引 0 表示 A,索引 1 表示 B 等等
-
我认为@Andam 就在这里。对象本质上是无序的容器。如果您维护一个表示列的属性名称的外部数组,那么插入只是更新该数组(并可能在每一行上添加新属性名称的默认值。)
标签: javascript arrays arrayobject