javascript - 插入数组对象的中间/第一个后更改数组对象的键

标签 javascript arrays arrayobject

我正在开发类似 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"}
];

它只是将新列插入

我想我必须在每一行的所有字母键之间插入一个新的单元格/项目,并重命名所有键(在这种情况下,将键 B 重命名为 CCD 等)。

我希望结果看起来像这样:

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 行时。

我有两个问题:

  • 最有效的方法是什么?
  • 如果我有很多行和列,在重命名这些键时会出现性能问题吗?

最佳答案

不要对行或列使用文字名称。

为了提高性能,将一个数据对象直接链接到列和/或行(在元胞数组中创建一些属性,如 _row 和 _col)并将 _cells 放在行和列中。

例子:

var data = {};

data.rows = [
{idx: 'A', _cells: []},
{idx: 'B', _cells: []},
{idx: 'C', _cells: []}
]

data.cols = [
{idx: 'A', _cells: []},
{idx: 'B', _cells: []},
{idx: 'C', _cells: []}
]

data.cells = [];

function addCell( rowIdx, colIdx, value) {
  var row = data.rows[rowIdx];
  var col = data.cols[rowIdx];
  var cell = {value: value, _row: row, _col: col};
  data.cells.push(cell);
  row._cells.push(cell);
  col._cells.push(cell);
}

for(var r=0; r<3; r++)
  for (var c=0;c<3; c++)
    addCell(r,c,'row ' + r + ' col ' + String.fromCharCode(65 + c));

console.log(data);

所以...您可以毫不费力地插入/删除/排序/重命名行。

您可以毫不费力地插入/删除/排序/重命名列中的所有单元格。

如果顺序很重要,您可以“映射”按行/列排序的单元格

关于javascript - 插入数组对象的中间/第一个后更改数组对象的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64354523/

相关文章:

javascript - 使用 jQuery 删除匹配词

javascript - 如何在 Angular 中通过 $resource 从自定义指令发送输入值?

java - 在这种情况下我将如何正确使用数组?

arrays - 在 Scala 中移动零

javascript - 如何根据 TypeScript 中的条件在数组对象中创建新属性

javascript - JavaScript 中的reduce 方法出现意外结果

javascript - 如何监控for循环?

c - 将结构数组转换为二叉搜索树

javascript - 将 json 对象转换为关联数组