创建成对列表/集合的有效方法:TypeScript/JavaScript中的数字枚举键和对象

创建成对列表/集合的有效方法:TypeScript/JavaScript中的数字枚举键和对象,javascript,typescript,Javascript,Typescript,最简单的成对列表是什么:{enum(numeric)-object}在TypeScript/JavaScript中 假设我们有以下示例代码: // interface for some objects export interface ObjI { num: number; str: string; } // some objects export const objA: ObjI = { num: 10000, str: "AAAA", }; export

最简单的成对列表是什么:
{enum(numeric)-object}
在TypeScript/JavaScript中

假设我们有以下示例代码:

// interface for some objects
export interface ObjI {
  num: number;
  str: string;
}

// some objects
export const objA: ObjI = {
  num: 10000,
  str: "AAAA",
};
export const objA1: ObjI = {
  num: 100001,
  str: "AAA1",
};
export const objB: ObjI = {
  num: 200000,
  str: "BBB",
};

export const objB2: ObjI = {
  num: 200000,
  str: "BBB",
};
export const objC: ObjI = {
  num: 333,
  str: "CCC",
};

// enum of indexes - normally larger values
enum objEnum {
  A = 10,
  A1 = 11,
  A2 = 12,
  B = 20,
  B8 = 28,
  C = 30,
  C7 = 37,
  C9 = 39,
}

// output tests
export class TestValues {
  run() {
    const ar: ObjI[] = [];
    ar[objEnum.A2] = objA;
    ar[objEnum.B8] = objB;
    ar[objEnum.C9] = objC;

    let ix: number;

    console.log("-----");

    // This returns:
    //  0 " val: " "AAAA"
    //  1 " val: " "BBB"
    //  2 " val: " "CCC"
    ix = 0;
    ar.forEach((o) => console.log(ix++, " val: ", o.str));

    console.log("-----");

    // This returns:
    //  0 - 39 lines - 40 elements
    ix = 0;
    for (let o of ar) {
      console.log(ix++, " val: ", o ? o.str : "-");
    }

    console.log("-----");
    // This returns:
    //  0, 1, 2
    ix = 0;
    for (let o in ar) {
      // THIS CANNOT BE USED - error:
      // Property 'str' does not exist on type 'string'.ts(2339)
      //console.log(ix++, ' val: ', o.str);
      console.log(ix++);
    }
  }
}

问题:

似乎在数组“
ar[39]=xxx
”中,TypeScript在内存中从0到39生成40个元素

这是真的吗?如果是这样的话,考虑到我们只添加了3个元素,数组将不是合适的应用类型,这将是一种浪费或资源

创建不同组的
{number-object}
对的列表的最有效方法是什么?给定的数字索引可能不是1的序列,而是更高值的数字,例如1001、1202、1307等,如示例数组“
ar[]

似乎在数组'ar[39]=xxx'中,TypeScript在内存中从0-39生成40个元素。这是真的吗

没有

const arr=[]
arr[39]=“你好”

console.log(Object.keys(arr))//[39]
这不是TS,而是JS的工作方式,请在控制台中尝试:`const ar=[];ar[39]=
xxx
;//[empty×39,'xxx']`一种有效的方法是使用一个对象:obj[1001]='xxx',然后使用object.key(obj)循环遍历这些值,或者直接作为obj[key]逻辑响应访问它们。只有阵列中的“最坏情况…”。。。如果指数很高,仍然会有一些浪费。但我认为,设计比这更聪明。不过,这里的答案似乎是普通对象。可能是映射或记录类型,但底层类的开销很小