我如何用下划线合并Nodejs中的对象数组

How can i merge an array of objects in Nodejs with underscore

在我的例子中,我有一个 2 db 查询,它们是对象,其中 return 包含一个键和名称字段的所有可能项目,另一个是一个具有键、名称的对象和值域。我想要做的是合并两个对象,其中对象 1 是主要对象,对象 2 应该合并到其中。

我理想中想要的是 return Data2 中具有值字段的所有项目合并到 data2 中,如果数据 1 中没有数据,则为 0。如果那不可能,我也可以没有值数据 2 中的项目,但我什至得到了一个奇怪的结果。

仅供参考,我正在使用下划线

const data1 = [
        {
            "count": 2,
            "key": "c28f7ead-d87b-4ad5-b6b3-1f204b013b50",
            "name": "Notes Written"
        },
        {
            "count": 1,
            "key": "d0181c74-22a9-4f99-9cc9-df3467c51805",
            "name": "Pop-Bys Delivered"
        },
        {
            "count": 2,
            "key": "90d142ea-6748-4781-b2b9-4f05aab12956",
            "name": "Database Additions"
        },
        {
            "count": 1,
            "key": "723e95dd-8c47-48ed-b9c3-1b010b092a1b",
            "name": "Referals Given"
        }
 
    ]

const data2 = [
                    {
                        "key": "8646ec5d-7a72-49bd-9a68-cf326d1c4a14",
                        "name": "Calls Made"
                    },
                    {
                        "key": "c28f7ead-d87b-4ad5-b6b3-1f204b013b50",
                        "name": "Notes Written"
                    },
                    {
                        "key": "d0181c74-22a9-4f99-9cc9-df3467c51805",
                        "name": "Pop-Bys Delivered"
                    },
                    {
                        "key": "90d142ea-6748-4781-b2b9-4f05aab12956",
                        "name": "Database Additions"
                    },
                    {
                        "key": "723e95dd-8c47-48ed-b9c3-1b010b092a1b",
                        "name": "Referals Given"
                    },
                    {
                        "key": "0f054686-ef13-4993-ac5b-f640ceeaaa8d",
                        "name": "Referals Received"
                    }
                ]

 console.log(_.extend( data2, data1 ))

这是一个 Replit 示例 Sample Code

  • 使用 reduce, iterate over data1 while updating a Map 个键数对
  • 使用 each,遍历 data2 并将 value 设置为地图中 key 的值,如果没有,则设置 0不存在

const 
  data1 = [ { "count": 2, "key": "c28f7ead-d87b-4ad5-b6b3-1f204b013b50", "name": "Notes Written" }, { "count": 1, "key": "d0181c74-22a9-4f99-9cc9-df3467c51805", "name": "Pop-Bys Delivered" }, { "count": 2, "key": "90d142ea-6748-4781-b2b9-4f05aab12956", "name": "Database Additions" }, { "count": 1, "key": "723e95dd-8c47-48ed-b9c3-1b010b092a1b", "name": "Referals Given" } ],
  data2 = [ { "key": "8646ec5d-7a72-49bd-9a68-cf326d1c4a14", "name": "Calls Made" }, { "key": "c28f7ead-d87b-4ad5-b6b3-1f204b013b50", "name": "Notes Written" }, { "key": "d0181c74-22a9-4f99-9cc9-df3467c51805", "name": "Pop-Bys Delivered" }, { "key": "90d142ea-6748-4781-b2b9-4f05aab12956", "name": "Database Additions" }, { "key": "723e95dd-8c47-48ed-b9c3-1b010b092a1b", "name": "Referals Given" }, { "key": "0f054686-ef13-4993-ac5b-f640ceeaaa8d", "name": "Referals Received" } ];

const map = _.reduce(
  data1, 
  (map, { key, count }) => map.set(key, count),
  new Map
);

_.each(
  data2,
  e => e.value = map.get(e.key) || 0
);

console.log(data2);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.13.1/underscore-min.js" integrity="sha512-ZuOjyqq409+q6uc49UiBF3fTeyRyP8Qs0Jf/7FxH5LfhqBMzrR5cwbpDA4BgzSo884w6q/+oNdIeHenOqhISGw==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>