创建成对列表/集合的有效方法: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]逻辑响应访问它们。只有阵列中的“最坏情况…”。。。如果指数很高,仍然会有一些浪费。但我认为,设计比这更聪明。不过,这里的答案似乎是普通对象。可能是映射或记录类型,但底层类的开销很小