如何解决逻辑应用程序/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 中有点冗长,但想法相对简单:
- 创建您要查找的用户的地图,以便您每次进行 O(1) 查找而不是 O(n) 查找
- 过滤每个项目的用户列表以仅包含在 db2Users 列表中找到的用户
- 如果在第 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 举报,一经查实,本站将立刻删除。