[英]How to traverse an Object in Typescript?
我有一个接收对象的函数,它看起来像下面的一个,
Object(12)
0: "UQ"
1: "YTL"
2: "VZW"
3: "LGT"
4: "KDDI"
5: "KT"
6: "SPRINT_T"
7: "RIL"
8: "SKT"
9: "SPRINT"
10: "KPS"
11: "GLB1"
并将其分配给变量名称是 results: string [];
现在我使用 forEach 遍历整个数组,但我不能。 然后我打印显示 0 的对象的长度。
但我可以使用 results[0] 或 results[1] 访问名称。 但我不能使用循环。
现在,我如何遍历整个对象并访问所有名称,如“UK”、“YTL”。
使用 Object.keys()。 由于这不是数组而是对象,因此不能使用 forEach。
Object.keys(myObject)
.sort((x, y) => x >= y ? 1 : -1) // for order preserving, can be omitted if order doesn't matter
.forEach(key => {
const value = myObject[key];
})
在 Typescript 中,您可以通过两种方式分配 json 数据。
假设您将 json 数据存储在变量名 data.json 中。 然后您可以按原样分配它。
data: string[];
this.service.getData()
.subscribe(
(data: string[]) => {
this.data = data;
});
通过这种方式,您可以使用 Foreach 或您对这个问题的期望。
通过这种方式,您可以将该 json 数据分配为您在问题中显示的对象。
data: string[];
this.service.getData()
.subscribe(
(data: string[]) => {
this.data = {... data };
});
在您的问题中,您必须使用第一个。
我通过TypeScript
创建了一个示例来遍历一个对象并获取所有终端节点,希望对您有所帮助:
function getCurrentLevelTerminalNodes(obj: any, maxDepth = 100) {
if (maxDepth <= 0) {
throw new Error('Too deep to traverse!');
}
const res: any[] = [];
Object.keys(obj).forEach(value => {
if (typeof obj[value] !== 'object') {
res.push(obj[value]);
} else {
res.push(...getCurrentLevelTerminalNodes(obj[value], maxDepth - 1));
}
});
return res;
}
export default function getTerminalNodes(obj: Object) {
return getCurrentLevelTerminalNodes(obj);
}
import getTerminalNodes from './terminal-node';
describe('terminal-node', () => {
it('get all terminal nodes', () => {
const testObj = {
a: {
b: {
c: 'c',
},
},
b: 'b',
};
expect(getTerminalNodes(testObj)).toStrictEqual(['c', 'b']);
});
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.