如何通过一个字符串路径来访问修改对象属性?
我有一个多层级的对象结构大概是这样的:
var data=[
{
"title": "节点1",
"key": "0-1",
"children": [{
"title": "子节点1",
"key": "0-1-1"
}]
},
{
"title": "节点2",
"key": "0-2",
"children": [{
"key": "0-2-1",
"title": "未命名"
}]
}];
我要修改某个元素的属性,常规操作不应该是这样嘛:
data['1']['children']['0']['title']="小明";
为了得到这一连串方括号访问路径,我通过扁平化来搜索匹配元素,这样我就得到了这样的数据格式:
var flatData={
"['0']['title']": "节点1",
"['0']['key']": "0-1",
"['0']['children']['0']['title']": "子节点1",
"['0']['children']['0']['key']": "0-1-1"
"['1']['title']": "节点2",
"['1']['key']": "0-2",
"['1']['children']['0']['key']": "0-2-1",
"['1']['children']['0']['title']": "未命名"
};
扁平化后,左边的key值都是字符串,现在我就卡在这一步,怎么把这个字符串拼到data后面,来达到访问修改元素的目的?
data和"['1']['children']['0']['title']"
这个对象和字符串怎么结合起来?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
给个思路,设对象为
data
"['0']['title']"
拆分为['0', 'title']
,结果设为keys
keys
长度是否<2,满足则直接以data[keys[0]]
取值并退出,否则继续0 - data.length - 2
的范围内依次对data
进行data[keys[i]]
取值r
,即结果为r[keys[keys.length - 1]]
直接用lodash里的get就可以,get
键值访问吗?可以尝试处理下字符串