微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

逻辑应用程序/JavaScript - 删除匹配值

如何解决逻辑应用程序/JavaScript - 删除匹配值

我有两个数据源。数据源 1 基本上是分配给这些项目的项目和用户的列表。数据源 2 是我想从数据源 1 中的项目中删除用户列表。

数据源 1:

[
   {
      "db1Project":[
         {
            "projectCode":"1","assignment":{
               "db1User":[
                  {
                     "assignee":"wantzc"
                  },{
                     "assignee":"michelles"
                  }
               ]
            }
         },{
            "projectCode":"2","assignment":{
               "db1User":[
                  {
                     "assignee":"stallinga"
                  },{
                     "assignee":"domanl"
                  },{
                     "assignee":"brantleyd"
                  }
               ]
            }
         },{
            "projectCode":"3","assignment":{
               "db1User":[
                  {
                     "assignee":"cinnamonk"
                  }
               ]
            }
         }
      ]
   }
]

我想将数据源 1 中的“受让人”与数据源 2 中的“发起人”相匹配。

数据源 2:

[
   {
      "db2Users":[
         {
            "sponsor":"wantzc"
         },{
            "sponsor":"patem"
         },{
            "sponsor":"stallinga"
         },{
            "sponsor":"oliviaa"
         },{
            "sponsor":"brantleyd"
         }
      ]
   }
]

然后删除不匹配的“受让人”并生成以下输出

期望的输出

[
   {
      "db1Project":[
         {
            "projectCode":"1","assignment":{
               "db1User":[
                  {
                     "assignee":"wantzc"
                  }
               ]
            }
         },{
                     "assignee":"brantleyd"
                  }
               ]
            }
         }
      ]
   }
]

能否仅使用 Logic App 完成此操作?如果没有,如何使用 JavaScript 做到这一点?

解决方法

这在 Javascript 中有点冗长,但想法相对简单:

  1. 创建您要查找的用户的地图,以便您每次进行 O(1) 查找而不是 O(n) 查找
  2. 过滤每个项目的用户列表以仅包含在 db2Users 列表中找到的用户
  3. 如果在第 2 步之后仍有任何 db1Users,则将该项目添加到新的结果集中

这将需要 1 次遍历您的原始数组,因此它是一种高效而简单的算法来完成您想要做的事情。

let data = [{"projectCode":"1","assignment":{"db1User":[{"assignee":"wantzc"},{"assignee":"michelles"}]}},{"projectCode":"2","assignment":{"db1User":[{"assignee":"stallinga"},{"assignee":"domanl"},{"assignee":"brantleyd"}]}},{"projectCode":"3","assignment":{"db1User":[{"assignee":"cinnamonk"}]}}];

let db2Users = [{"sponsor":"wantzc"},{"sponsor":"patem"},{"sponsor":"stallinga"},{"sponsor":"oliviaa"},{"sponsor":"brantleyd"}];

let db2UsersMap = db2Users.reduce((res,curr) => {
  res[curr.sponsor] = true;
  return res;
},{});

let filteredProjects = data.reduce((res,project) => {
  let currProjUsers = project.assignment.db1User;
  project.assignment.db1User = currProjUsers.filter((user) => db2UsersMap[user.assignee]);
  if (project.assignment.db1User.length > 0) { res.push(project); }
  return res;
},[]);


console.log(filteredProjects);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?