如何通过一个字符串路径来访问修改对象属性?

发布于 2022-09-12 13:53:52 字数 997 浏览 19 评论 0

我有一个多层级的对象结构大概是这样的:

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

迷鸟归林 2022-09-19 13:53:52

给个思路,设对象为data

  1. "['0']['title']"拆分为['0', 'title'],结果设为keys
  2. 判断keys长度是否<2,满足则直接以data[keys[0]]取值并退出,否则继续
  3. 0 - data.length - 2的范围内依次对data进行data[keys[i]]取值
  4. 最后一次取值的结果设为r,即结果为r[keys[keys.length - 1]]
晚风撩人 2022-09-19 13:53:52

直接用lodash里的get就可以,get

一念一轮回 2022-09-19 13:53:52

键值访问吗?可以尝试处理下字符串

var keys = [1, "children", 0, "title"];
var ans = keys.reduce((acc, cur) => acc[cur], data);//"未命名"
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文