如何将两个集合转换为一个集合
How to transform two collections into one
这是一个基本的数据结构问题,也是一个具体的实现问题。
我有两个集合:
['One', 'Two', 'Three']
[{'Name': 'Two', 'Time': '12:00'}, {'Name': 'Four', 'Time': '14:30'}]
我想要的是将它们合并到第三个集合中:
[
{'Name': 'One', 'HasTime': false, 'Valid': true },
{'Name': 'Two', 'HasTime': true, 'Valid': true, 'Time': '12:00' },
{'Name': 'Three', 'HasTime': false, 'Valid': true },
{'Name': 'Four', 'HasTime': true, 'Valid': false, 'Time': '14:30' },
]
我可以像在这个伪代码中一样做到这一点:
// Pseudo-Code, hence no isOwnProperty and other checks
var r = [];
for(v in one) {
var obj = { Name: v, Valid: true, HasTime: false };
for(t in two) {
if(t.Name === v) {
obj.HasTime = true;
obj.Time = t.Time;
break;
}
}
r.push(obj);
}
for(t in two) {
var valid = false;
for(x in r) {
if(x.Name === t.Name) {
valid = true;
break;
}
}
if(!valid) {
var obj = new { Name: t.name, Valid: false, HasTime: true, Time: t.Time };
r.push(obj);
}
}
return obj;
这似乎效率低下,我想知道 Angular 是否已经有这样的功能 - 我的问题是我不知道这种技术叫什么。我想在集合论或函数式编程中有一个术语,因为这本质上是一个联合,然后是一个变换,但是函数式编程中的基本术语我无法理解 - 有这个名字吗?
如果你愿意,你可以称之为map-reduce,因为你基本上需要首先将两个数组转换为统一的结构(Map),然后将它们合并在一起(Reduce)。
然而,它没有什么神奇之处,特别是因为你的结构是完全定制的,所以你不能避免你的 aglorithm。
你真的不需要map缩减,因为你只有两个数组,但为了给你一个想法,它看起来像这样:
var result = [one, two].map(function(arr) {
// transform arr into {Name, Valid, HasTime} items
}).reduce(function(arr1, arr2) {
// merge arr1 and arr2
});
相关文章:
- Meteor.js只更新一个参数,而不是整个集合
- 如何查找流星集合中最后一个元素/对象的id
- 包含一个集合的1到3个成员但其中一个成员不能单独存在的正则表达式
- 将一个对象集合映射到汇总集合的单个对象
- 如何将两个集合转换为一个集合
- Meteor:访问另一个集合,每个块中有一个id
- 主干-用一个请求替换整个集合
- 如何计算mongodb中两个集合中一个字段的不同值的数量
- 组织一个backbone.js集合
- 如何在集合中指定模型的一个属性
- Backbone.js视图可以有一个模型和一个集合吗
- 另一个集合视图中的集合视图
- 如何使用Angular 2服务提供包含指向另一个资源的链接/ids的资源集合
- Backbone.Collection 获得第一个 n 作为新集合
- Mongo-Aggregate:如何与另一个集合中的字段进行比较
- Meteor - 将 mongodb 查询分配给变量并将其插入到另一个集合
- 在 Backbone.js 中为集合中的一个元素创建详细信息页面
- 基于 MongoDB 中另一个集合中的数据查询一个集合中的数据
- 流星 - 将数据从一个集合移动到另一个集合
- 更改一个对象的可观察属性会更改集合中所有对象的属性