将字符串作为函数参数传递,并将其用作object.assign中的动态键名

时间:2018-04-10 11:31:54

标签: javascript angular typescript object

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

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

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代码中使用的动态属性,因为当前声明使用标签“list”而不是作为参数传递的字符串。如何在我的方法中传递参数并动态地将其用作关键名称/标签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代码中动态设置密钥名称。

提前致谢,对不起,如果我的措辞不好,如果是的话,我会返工。

1 个答案:

答案 0 :(得分:4)

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

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