如何利用数据集键名过滤另一数据集并合并生成新数组?
解决方案
直接用map遍历数据集2,通过UserNumber关联数据集1的键,再合并对象即可,实现代码如下:
const dataset1 = { "001": {"hasCar": false, "hasBike": false}, "002": {"hasCar": true, "hasBike": false}, "003": {"hasCar": false, "hasBike": false}, "004": {"hasCar": false, "hasBike": true} }; const dataset2 = [ {"UserNumber": "001", "vehicleDetails": {"country": "IN", "color": "Black", "company": "Ford", "postalCode": "XXXXXXX"}}, {"UserNumber": "002", "vehicleDetails": {"country": "IN", "color": "Black", "company": "Ford", "postalCode": "XXXXXXX"}}, {"UserNumber": "003", "vehicleDetails": {"country": "IN", "color": "Black", "company": "Ford", "postalCode": "XXXXXXX"}}, {"UserNumber": "004", "vehicleDetails": {"country": "IN", "color": "Black", "company": "Ford", "postalCode": "XXXXXXX"}} ]; // 合并逻辑 const mergedResult = dataset2.map(userItem => { // 用UserNumber匹配dataset1对应的键值 const extraInfo = dataset1[userItem.UserNumber]; // 合并两个对象,保留原结构并添加新字段 return { ...userItem, ...extraInfo }; }); console.log(mergedResult);
逻辑说明
- 遍历数据集2:
map方法会遍历数组的每一项并返回新数组,刚好符合生成新合并数组的需求。 - 关联匹配:通过当前项的
UserNumber作为索引,直接从dataset1中取出对应的hasCar和hasBike信息,这种方式比find更高效,时间复杂度为O(n)。 - 对象合并:使用扩展运算符
...把原用户对象和dataset1中的信息合并,自动将hasCar、hasBike字段添加到结果对象中。
如果需要过滤掉dataset2中不存在于dataset1的项,可以在map前加filter:
const mergedResult = dataset2 .filter(userItem => dataset1.hasOwnProperty(userItem.UserNumber)) .map(userItem => ({ ...userItem, ...dataset1[userItem.UserNumber] }));
内容的提问来源于stack exchange,提问作者Strugglingwithbugs
相关产品推荐
相关产品推荐

