mirror of
https://github.com/whoisclebs/lodash.git
synced 2026-02-09 02:17:50 +00:00
Ensure _.merge applies a given callback to nested properties. [closes #227]
Former-commit-id: 1a58c178e0ecb9c50512f221b4aed82762709066
This commit is contained in:
@@ -2005,6 +2005,7 @@
|
|||||||
var callback = args[3],
|
var callback = args[3],
|
||||||
stackA = args[4],
|
stackA = args[4],
|
||||||
stackB = args[5];
|
stackB = args[5];
|
||||||
|
console.log(object)
|
||||||
} else {
|
} else {
|
||||||
stackA = [];
|
stackA = [];
|
||||||
stackB = [];
|
stackB = [];
|
||||||
@@ -2041,9 +2042,10 @@
|
|||||||
? (isArray(value) ? value : [])
|
? (isArray(value) ? value : [])
|
||||||
: (isPlainObject(value) ? value : {});
|
: (isPlainObject(value) ? value : {});
|
||||||
|
|
||||||
|
var isShallow;
|
||||||
if (callback) {
|
if (callback) {
|
||||||
result = callback(value, source);
|
result = callback(value, source);
|
||||||
if (typeof result != 'undefined') {
|
if ((isShallow = typeof result != 'undefined')) {
|
||||||
value = result;
|
value = result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2052,13 +2054,14 @@
|
|||||||
stackB.push(value);
|
stackB.push(value);
|
||||||
|
|
||||||
// recursively merge objects and arrays (susceptible to call stack limits)
|
// recursively merge objects and arrays (susceptible to call stack limits)
|
||||||
if (!callback) {
|
if (!isShallow) {
|
||||||
value = merge(value, source, indicatorObject, callback, stackA, stackB);
|
value = merge(value, source, indicatorObject, callback, stackA, stackB);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (callback) {
|
if (callback) {
|
||||||
|
console.log('hi')
|
||||||
result = callback(value, source);
|
result = callback(value, source);
|
||||||
if (typeof result == 'undefined') {
|
if (typeof result == 'undefined') {
|
||||||
result = source;
|
result = source;
|
||||||
|
|||||||
11
test/test.js
11
test/test.js
@@ -1801,8 +1801,15 @@
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('should handle merging if `callback` returns `undefined`', function() {
|
test('should handle merging if `callback` returns `undefined`', function() {
|
||||||
var actual = _.merge({ 'a': 1 }, { 'a': 2 }, function() { });
|
var actual = _.merge({ 'a': { 'b': [1, 1] } }, { 'a': { 'b': [0] } }, function() { });
|
||||||
deepEqual(actual, { 'a': 2 });
|
deepEqual(actual, { 'a': { 'b': [0, 1] } });
|
||||||
|
});
|
||||||
|
|
||||||
|
test('should defer to `callback` when it returns a value other than `undefined`', function() {
|
||||||
|
var actual = _.merge({ 'a': { 'b': [0, 1] } }, { 'a': { 'b': [2] } }, function(a, b) {
|
||||||
|
return _.isArray(a) ? a.concat(b) : undefined;
|
||||||
|
});
|
||||||
|
deepEqual(actual, { 'a': { 'b': [0, 1, 2] } });
|
||||||
});
|
});
|
||||||
}(1, 2, 3));
|
}(1, 2, 3));
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user