【问题标题】:Passing a string as a function argument and using it as a dynamic key name in object.assign将字符串作为函数参数传递,并将其用作 object.assign 中的动态键名
【发布时间】:2018-04-10 11:31:54
【问题描述】:

我在服务中有一个方法(我的应用程序是一个用 TypeScript 编写的 Angular 5 应用程序),它接受两个参数,一个是事件对象,另一个是字符串,它是我存储的对象的键浏览器的网络存储。

该方法将一个新对象分配给浏览器的网络存储并将其与第二个对象组合,这是我的代码

setPaginationObject(event: any, list: string) {
    let sitePagination = JSON.parse(sessionStorage.getItem('sitePagination')) || {};
    sitePagination = Object.assign(sitePagination, {list: event});
    sessionStorage.setItem('sitePagination', JSON.stringify(sitePagination));
}

这是我在组件中调用的方式:

public onPaginateChange(event: any): void {
    this.paginationService.setPaginationObject(event, 'usersList');
}

我的问题是我需要将参数分配给Object.assign 代码中使用的动态属性,因为当前声明使用标签“列表”而不是作为参数传递的字符串。如何在我的方法中传递参数并动态地将其用作键名/标记 Object.assign 第二个参数?

我想我可以这样做:

sitePagination = Object.assign(sitePagination, {`${list}`: event});

但这不起作用,或者我可以将参数签名更改为类似这样,以便对象在组件中而不是服务中格式化

this.paginationService.setPaginationObject({'usersList': event});

在服务中

setPaginationObject(obj: any) {
    let sitePagination = JSON.parse(sessionStorage.getItem('sitePagination')) || {};
    sitePagination = Object.assign(sitePagination, obj);
    sessionStorage.setItem('sitePagination', JSON.stringify(sitePagination));
}

上面看起来不错,但我现在只想知道如何在Object.assign 代码中动态设置键名。

先谢谢了,如果我的措辞不好,请见谅,如果是我会重做。

【问题讨论】:

    标签: javascript angular typescript object


    【解决方案1】:

    您可以在对象字面量中使用计算属性:

    let list: string = 'userList'
    let obj = {[list]: 'Value'}; // will be { 'userList': 'Value'} at runtime
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-15
      • 1970-01-01
      相关资源
      最近更新 更多