从对象数组创建子对象数组



我的一个组件中有一个JavaScript对象数组

@Component(stuff)
export class ComponentName {
arrayOfObjects = [];
// stuff
}

其中每个对象都有键key1key2.

我想要的是ComponentName有一个数组arrayOfSubobjects其内容是

{
key1: 'value1',
key2: 'value2'
}

对于驻留在arrayOfObjects中同一对象中的每对key1key2

此外,如果key1的值在对象中更新arrayOfObjects,则必须反映在arrayOfSubobjects中。key2也是一样.

请注意,arrayOfObjects受制于失去/获得对象。

为了使值动态更新,您需要指向相同的引用。

我想知道为什么不创建一个仅公开 key1、key2 并使用相同的数组的接口。

无论如何,如果我了解您的要求,我认为这样的事情会起作用:

interface ComplicatedObject {
key1: string;
key2: string;
}
class SubObject {
private complicatedObject: ComplicatedObject;
constructor(complicatedObject: ComplicatedObject) {
this.complicatedObject = complicatedObject;
}
get key1(): string {
return this.complicatedObject.key1;
}
get key2(): string {
return this.complicatedObject.key2;
}
}
describe('Testing ComplicatedObject -> SubObject', () => {
it('should update key1 on SubObject when Complicated Object changes', () => {
const obj: ComplicatedObject = {
key1: '1',
key2: '2'
};
const sub: SubObject = new SubObject(obj);
expect(sub.key1).toBe(obj.key1);
expect(sub.key2).toBe(obj.key2);
obj.key1 = 'edited';
obj.key2 = 'edited as well';
expect(sub.key1).toBe(obj.key1);
expect(sub.key2).toBe(obj.key2);
});
});

您可以使用map方法。一个 Javascript 功能,它遍历给定的数组,其工作原理类似于forEach,并将在循环结束时返回一个值。

let arrayofSubobjects;
reduceTheArray(): void {
this.arrayofSubobjects = arrayOfObjects.map(ele => {key1: ele.key1, key2: ele.key2});
}

我已经将arrayofSubobjects声明为全局变量,并在函数中使用它来存储过滤后的值。
使用打字稿语法(标签)实现。

最新更新