javascript - 合并两个不同形状的数据结构

标签 javascript functional-programming lenses

我有两个具有不同形状的数据结构,它们来自两个不同的 API。数据为JSON格式,语言为JavaScript。

数组1:

[ { "document" : { "html" : "some_html", "name" : "DOCUMENT_NAME_1" },
    "tooltips" : [ { "html" : "some_html", "name" : "TASK_NAME_1" }, 
                   { "html" : "some_html", "name" : "TASK_NAME_2" } ] },
  { "document" : { "html" : "some_html", "name" : "DOCUMENT_NAME_2" },
    "tooltips" : [ { "html" : "some_html", "name" : "TASK_NAME_3" }, 
                   { "html" : "some_html", "name" : "TASK_NAME_4" } ] }]

数组2:

  [ [ { "name" : "TASK_NAME_1", "status" : "FINISHED" }, 
      { "name" : "TASK_NAME_2", "status" : "OPEN" } ],
    [ { "name" : "TASK_NAME_3", "status" : "OPEN" }, 
      { "name" : "TASK_NAME_4", "status" : "FUTURE" } ] ]

数组 1 中的工具提示字段的元素包含与数组 2 的元素相同的“名称”。如何优雅地将数组 2 中的“状态”合并到数组 1 中的工具提示中?

我认为镜头可能是正确的答案,但我不确定,因为我从未使用过它们。

我知道可以使用嵌套迭代和更新数组 1 来解决这个问题。理想情况下,我正在寻找一种不修改现有数据结构的方法。

最佳答案

这有点复杂,但应该适合您

array2.forEach(function(tooltips){
    tooltips.forEach(function(tooltip){
        for (var i = 0; i < array1.length; i++) {
            for (var j = 0; j < array1[i].tooltips.length; j++) {
                var arr1Tooltip = array1[i].tooltips[j];
                if(arr1Tooltip.name == tooltip.name)
                    arr1Tooltip.status = tooltip.status;
            };
        };        
    });
});

console.log(JSON.stringify(array1));

关于javascript - 合并两个不同形状的数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24651885/

相关文章:

javascript - 无法从 cron 执行中获取 Nightmare 结果

lambda - 用 rust 编写的替代功能样式

c++ - 未命名的命名空间和 iostream 导致 "!= being illegal operation"

haskell - 为给定的数据类型编写一个在镜头上具有多态性的函数?

json - 如何使用 argonaut 镜头修改 JSON 中的值和类型?

javascript - 执行远程验证后调用函数

javascript - 未能加载响应数据请求内容已从检查器缓存中逐出

java - 如何使用 java 8 在超时的情况下调用另一个函数内的通用函数?

haskell - 有人可以解释有关“镜头”库的图吗?

javascript - 在匿名函数中注释参数