无限嵌套的json数据,匹配id,替换

发布于 2022-09-12 02:16:08 字数 2422 浏览 13 评论 0

问题描述

根据 checkmove.id 去匹配下面的id,匹配到了就把checkmove取代id所在的对象,但不知道怎么写
image.png
image.png

that.functionsList

[
    { 
        listRight: [
            {
            id: getID(),
            tasks: [
                    {
                        id: getID(),  
                        tasks: '0-0'
                    },
                    {
                        id: getID(),  
                        tasks: '0-1'
                    },
                ]
            },
            {
            id: getID(),  
            tasks: [
                    {
                        id: getID(),  
                        tasks: '1-0'
                    },
                    {
                        id: getID(),  
                        tasks: '1-1'
                    },
                ]
            },
        ],
        name:''
    },
    { 
        listRight: [
            {
            id: getID(),
            tasks: [
                    {
                        id: getID(),  
                        tasks: '0-0'
                    },
                    {
                        id: getID(),  
                        tasks: '0-1'
                    },
                ]
            },
            {
            id: getID(),  
            tasks: [
                    {
                        id: getID(),  
                        tasks: '1-0'
                    },
                    {
                        id: getID(),  
                        tasks: '1-1'
                    },
                ]
            },
        ],
        name:''
    },
]

相关代码

Bus.$on('changeCheckItem',checkmove => {
    console.log('this.functionsList: ', this.functionsList);
    this.functionsList.some((item1,index1) => {
      if (item1.name === this.funcName) {
        let listRight = this.functionsList[index1].listRight;
        function func(list) {
          list.map(item2 => {
            if (item2.id === checkmove.id) {
              // item = value   
            }
            if (item2.hasOwnProperty('tasks')&&item2.tasks.length > 0) {
              func(item2.tasks)
            }
          })
        }
        func(listRight)
        return true;
      }
    })
})

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

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

发布评论

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

评论(1

终陌 2022-09-19 02:16:08

这里tasks依然跟上次一样考虑了嵌套多层的情况。

var data = [
    { 
        listRight: [
            {
            id: 'one-0',
            tasks: [
                    {
                        id: 'one-0-0',  
                        tasks: '0-0'
                    },
                    {
                        id: 'one-0-1',  
                        tasks: '0-1'
                    },
                ]
            },
            {
            id: 'one-1',  
            tasks: [
                    {
                        id: 'one-1-0',  
                        tasks: '1-0'
                    },
                    {
                        id: 'one-1-1',  
                        tasks: '1-1'
                    },
                ]
            },
        ],
        name:'one'
    },
    { 
        listRight: [
            {
            id: 'two-0',
            tasks: [
                    {
                        id: 'two-0-0',  
                        tasks: '0-0'
                    },
                    {
                        id: 'two-0-1',  
                        tasks: '0-1'
                    },
                ]
            },
            {
            id: 'two-1',  
            tasks: [
                    {
                        id: 'two-1-0',  
                        tasks: '1-0'
                    },
                    {
                        id: 'two-1-1',  
                        tasks: '1-1'
                    },
                ]
            },
        ],
        name:'two'
    },
];

function updateTask(list, checkmove) {
  for(var i = 0; i<list.length;i++) {
    var task = list[i];
    if(task.id == checkmove.id) {
      list[i] = checkmove;
      return true;
    }
    if(
      Array.isArray(task.tasks) && 
      updateTask(task.tasks, checkmove)
    ) return true;
  }
}


function updateData(data, funcName, checkmove) {
  var item = data.find(v => v.name === funcName);
  updateTask(item.listRight, checkmove);
  return data;
}


// updateData(data, 'one', {id: 'one-0-1', tasks: 'checkmove'})
// updateData(data, 'two', {id: 'two-1-1', tasks: 'checkmove'})
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文