-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathunderscore-join.js
27 lines (27 loc) · 939 Bytes
/
underscore-join.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// Produce an array that contains a join of the passed-in arrays.
// Last argument is a comparator function to compare keys
_.mixin({
join: function () {
var cmp = arguments[arguments.length - 1];
var join = [];
_.each(arguments, function (array) {
if (_.isFunction(array)) return;
_.each(array, function (newObj) {
var isMerged = false;
_.each(join, function (joinObj, joinIndex) {
if (cmp(newObj, joinObj)) {
_.each(newObj, function (value, key) {
joinObj[key] = value;
});
join[joinIndex] = joinObj;
isMerged = true;
}
});
if (!isMerged) {
join.push(newObj);
}
});
});
return join;
}
});