我在使用函数调用时遇到了一些麻烦。首先,这里是数据:
this.widgets = [
{ id: 1, title: 'widget', config: { sizex: 1 } }
]
这是功能:
editIT(id, prop, value) {
var elem = this.widgets.find(elem => elem.id === id);
if (elem !== null) {
elem[prop] = value;
}
}
我的问题是我可以编辑标题,如下所示:
<button (click)="editIT(1, 'title', 'some other title')">Edit Title</button>
以上工作但我现在想要编辑sizex属性,如下所示:
<button (click)="editIT(1, 'config.sizex', 2)">Edit Sizex</button>
并且没有编辑sizex。
我做错了什么?
答案 0 :(得分:1)
您可以创建一个为您迭代嵌套键并更新值的函数:
editIT(id, prop, value) {
var elem = this.widgets.find(elem => elem.id === id);
if (elem !== null) {
updateValue(prop, elem, value);
}
}
function updateValue(key, obj, value) {
let keys = key.split(".");
let finalKey = keys.pop();
let finalObj = keys.reduce((res, key) => res[key], obj);
finalObj[finalKey] = value;
}