我有一个Observable,它从Web服务中提取一些数据,并返回一个看起来像这样的对象数组。
可观察对象是这样创建的
contactFields$: Observable<IServerDropdownOption[]>;
this.contactFields$ = this.mailTemplateService.templateLookup(this.guids.MAIL_TEMPLATE_CONTACT_FIELDS);
哪个返回这样的内容
[
{value: "{{ first_name | fallback: "" }}", name: "First Name", selected: undefined},
{value: "{{ last_name | fallback: "" }}", name: "Last Name", selected: undefined}
]
我需要能够将此对象数组转换为最终看起来像这样的对象。
{
"{{ first_name | fallback: "" }}" : "First Name",
"{{ last_name | fallback: "" }}" : "Last Name"
}
修改后的ngOnInit()代码
ngOnInit() {
this.contactFields$ = this.mailTemplateService.templateLookup(this.guids.MAIL_TEMPLATE_CONTACT_FIELDS);
this.contactFields$.subscribe(res => console.log(res));
this.transformArr();
this.initForm();
// Custom button
FroalaEditor.DefineIcon('my_dropdown', {NAME: 'cog', SVG_KEY: 'cogs'});
FroalaEditor.RegisterCommand('my_dropdown', {
title: 'User Fields',
type: 'dropdown',
focus: false,
undo: false,
refreshAfterCallback: true,
options: this.result,
callback(cmd, val) {
console.log (val);
},
// Callback on refresh.
refresh($btn) {
console.log ('do refresh');
},
// Callback on dropdown show.
refreshOnShow($btn, $dropdown) {
console.log ('do refresh when show');
}
});
TransformArray代码
transformArr() {
console.log('Calling Transform');
this.contactFields$.subscribe(res => {
this.result = new Object() as { [key: string]: string; };
for (const each of res) {
console.log('Looping');
this.result[each.value] = each.name;
console.log(this.result);
}
});
}
答案 0 :(得分:1)
androidx.gridlayout.widget.GridLayout mygridLayout = findViewById(R.id.gridLayout);
for(int i=0; i<mygridLayout.getChildCount(); i++){
((ImageView) mygridLayout.getChildAt(i)).setImageResource(0);
}
应根据您的描述工作。
根据您的更新,您应该尝试将此功能与地图运算符一起使用
const transformArr = (arr) => {
let result = {}
arr.map(each => {
result[each.value] = each.name;
})
return result;
}
答案 1 :(得分:1)
我会subscribe
到必需组件中的observable
,而不是使用pipe
,因为这会影响您的IServerDropdownOption
返回类型。
您已订阅可观察项的组件
contactFields$;
result: { [key: string]: string; };
someFunction() {
this.contactFields$.subscribe(res => {
this.result = new Object() as { [key: string]: string; };
for (const each of res) {
this.result[each.value.replace('"', '\"')] = each.name;
}
});
}
现在,您可以在需要的情况下使用result
变量(视情况而定)下拉值。