代码之家  ›  专栏  ›  技术社区  ›  Muirik

比较对象时使用本机JavaScript方法浏览文档树

  •  1
  • Muirik  · 技术社区  · 6 年前

    我做了一些工作来做一个深入的比较(通过下划线和 diff )在两个对象之间(实际上是同一文档的预保存和后保存版本),以便隔离保存后不同的部分。以该文档结构为例:

    {
       _id: 4d39fe8b23dac43194a7f571,
       name: {
         first: "Jane",
         last: "Smith"
       }
       services: [
        {
         service: "typeOne",
         history: [ 
           { _id: 121, 
             completed: true,
             title: "rookie"
           },
           { _id: 122, 
             completed: false,
             title: "novice"
           } 
          ]
         },
         {
          service: "typeTwo",
          history: [ 
           { _id: 135, 
             completed: true,
             title: "rookie"
           },
           { _id: 136, 
             completed: false,
             title: "novice"
           } 
          ]
         }
       ]
     }
    

    如果将新元素添加到 history 数组,我可以成功地解析出这个更改。

    但是,除了拉出这个更改的部分,我还希望能够有效地从 历史 为了找到 service 因为我还需要知道这两者中的哪一个 services 数组元素实际已更改。有没有一种方法可以使用本机ES6 JavaScript来实现这一点?

    如果没有,我是否可以使用库来确定这一点?现在我可以通过索引获得“服务”的值:

    if (diff.path[1] === 0) {
      targetService = "typeOne";
    } else if (diff.path[1] === 1) {
      targetService = "typeTwo";
    } else if (diff.path[1] === 2) {
      targetService = "typeThree";
    }
    

    但据我所知,这并不是充分的证据,因为无法保证“服务”中的元素顺序在某个时刻是不会改变的。如果我可以在 服务 数组。我只是不确定是否有办法做到这一点(如果可能的话,向建议敞开心扉)。

    1 回复  |  直到 6 年前
        1
  •  2
  •   NemoStein    6 年前

    deep-diff 为您提供此更改的路径,如下所示:

    {
        kind: 'N',
        path: ['services', 1, 'history'],
        // ... other properties
    }
    

    可以使用此路径跟踪更改的对象:

    tree.services[changes.path[1]].service // 'typeTwo'