如何遍历打字稿中的对象?

时间:2018-10-25 11:12:04

标签: angular 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"

并将其分配给变量名是结果:字符串[];

现在我使用forEach遍历整个数组,但是我不能。然后,我打印显示0的对象的长度。

但是我可以使用results [0]或results [1]访问名称。但是我不能使用循环。

现在,我该如何遍历整个对象并访问所有名称,例如'UK','YTL'。

3 个答案:

答案 0 :(得分:1)

使用Object.keys()。由于这不是数组而是对象,因此不能使用forEach。

.findall()

答案 1 :(得分:0)

在Typescript中,您可以通过两种方式分配json数据。

  1. 按原样分配对象:

假设您将json数据存储在变量名称data中。然后,您可以按原样分配它。

data: string[];
this.service.getData()
    .subscribe(
      (data: string[]) => {
        this.data = data;
});

通过这种方式,您可以使用Foreach或对该问题的期望。

  1. 另一种使用方括号进行分配的方法,如下所示:

通过这种方式,您可以将json数据分配为问题中显示的对象。

data: string[];
this.service.getData()
    .subscribe(
      (data: string[]) => {
        this.data = {... data };
});

在遇到问题时,您必须使用第一个。

答案 2 :(得分:0)

我用TypeScript创建了一个示例来遍历对象并获取所有终端节点,希望对您有所帮助:

terminal-node.ts:

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']);
  });
});
相关问题