【问题标题】:Loop over object's key/value using TypeScript / Angular2 [duplicate]使用 TypeScript / Angular2 循环对象的键/值 [重复]
【发布时间】:2016-10-06 15:38:51
【问题描述】:

如何使用 TypeScript 迭代对象并能够访问键和值?

我的 json 对象看起来像这样:

{
    "clients": {
        "123abc": {
            "Forename": "Simon",
            "Surname": "Sample"
        },
        "456def": {
            "Forename": "Charlie",
            "Surname": "Brown"
        }
    }
}

要填充的客户端对象由如下所示的客户端模型组成:

export class ClientModel {
    id:string;
    forename:string;
    surname:string;

    constructor(
        private id:string,
        private forename:string,
        private surname:string
    ) {
        this.id = id;
        this.forename = forename;
        this.surname = surname;
    }
}

【问题讨论】:

    标签: javascript foreach typescript angular key-value


    【解决方案1】:

    给定:

    var a = {
        "clients": {
            "123abc": {
                "Forename": "Simon",
                "Surname": "Sample"
            },
            "456def": {
                "Forename": "Charlie",
                "Surname": "Brown"
            }
        }
    };
    
    class ClientModel {
        constructor(
            private id:string,
            private forename:string,
            private surname:string
        ) {}
    }
    

    这里是如何获取ClientModel对象数组:

    var clientList: ClientModel[] = Object.getOwnPropertyNames(a.clients)
        .map((key: string) => new ClientModel(key, a.clients[key].Forename, a.clients[key].Surname));
    

    ...这里还有如何获取从string (id) 到ClientModel 的地图:

    var clientMap: { [key: string]: ClientModel } = Object.getOwnPropertyNames(a.clients)
        .reduce((map: any, key: string) => {
            map[key] = new ClientModel(key, a.clients[key].Forename, a.clients[key].Surname);
            return map;
        }, {});
    

    经过 basarat 的评论并仔细查看Object.keys(),Object.keys 比Object.getOwnPropertyNames() 更适合在这里使用。不同之处在于后者也返回不可枚举的属性。在这种特殊情况下没有实际区别,但应该使代码的意图更加明确。其他一切都保持不变。

    【讨论】:

    • 老派 JavaScript 开发人员需要学习很多东西。非常感谢!
    • 非常喜欢Object.keys。同样的东西(大多数用途stackoverflow.com/a/22658584/390330),在野外更简单更常见?
    • @basarat 是的,确实,Object.keys 更合适,谢谢。
    猜你喜欢
    • 2013-04-11
    • 2015-10-14
    • 2017-09-29
    • 1970-01-01
    • 2016-06-30
    • 1970-01-01
    • 2021-07-15
    • 1970-01-01
    • 2020-04-30
    相关资源
    最近更新 更多