I think if you are going to use a class to represent your model SearchData, then it should be a method of the SearchData.
Something like this,
.ts
class Searchdata{
name = false;
age = false;
summer = false;
winter = false;
football = false;
tennis = false;
constructor() {}
setFromJSON(obj: Array<{name:string,visible:boolean}>) {
obj.forEach(element => {
this[element.name] = element.visible;
});
}
toString() {
return `{name:${this.name},age:${this.age},summer:${this.summer},winter:${this.winter},football:${this.football},tennis:${this.tennis}}`;
}
}
const permPageData = [
{
"name": "name",
"visible": true,
},
{
"name": "age",
"visible": true
}, {
"name": "football",
"visible": true
}
];
const tableSearchModel = new Searchdata();
console.log(tableSearchModel.toString());
tableSearchModel.setFromJSON(permPageData);
console.log(tableSearchModel.toString());
output
{name:false,age:false,summer:false,winter:false,football:false,tennis:false}
{name:true,age:true,summer:false,winter:false,football:true,tennis:false}
Although it is quite different approach, I had found interface pretty interest.
.ts
interface Searchdata{
name: boolean;
age: boolean;
summer: boolean;
winter: boolean;
football: boolean;
tennis: boolean;
}
function searchDataNew(): Searchdata {
return {
name: false,
age: false,
summer: false,
winter: false,
football: false,
tennis: false
};
}
function searchDataToString(sd: Searchdata) {
return `{name:${sd.name},age:${sd.age},summer:${sd.summer},winter:${sd.winter},football:${sd.football},tennis:${sd.tennis}}`;
}
function arrayDataToObjData(arr: Array<{name:string,visible:boolean}>): Searchdata {
const obj: any = {};
arr.forEach(element => {
obj[element.name] = element.visible;
});
return obj;
}
const permPageData = [
{
"name": "name",
"visible": true,
},
{
"name": "age",
"visible": true
}, {
"name": "football",
"visible": true
}
];
const tableSearchModel: Searchdata = {
...searchDataNew(),
...arrayDataToObjData(permPageData2)
};
console.log(searchDataToString(tableSearchModel));
result
{name:true,age:true,summer:false,winter:false,football:true,tennis:false}