fix _.removeAt with repeated indexes

This commit is contained in:
Dan Allison
2014-03-01 08:56:44 -08:00
committed by John-David Dalton
parent 95bd2dde19
commit ff26080c5c
2 changed files with 18 additions and 2 deletions

View File

@@ -2927,9 +2927,17 @@
} else {
removals.sort(baseCompareAscending);
}
var result = Array(length);
var result = Array(length),
adjust = -1,
removal, prev;
while(++index < length) {
result[index] = splice.call(array, removals[index] - index, 1)[0];
removal = removals[index];
if (removal === prev) {
result[index] = result[index - 1];
continue;
}
prev = removal;
result[index] = splice.call(array, removal - ++adjust, 1)[0];
}
return result;
}

View File

@@ -6820,6 +6820,14 @@
deepEqual(actual, [1, 2, 4, 5]);
});
test('should work with repeated indexes', 2, function() {
var array = [1, 2, 3, 4, 5];
var actual = _.removeAt(array, [0, 0, 1, 2, 2, 2]);
deepEqual(array, [4, 5]);
deepEqual(actual, [1, 1, 2, 3, 3, 3]);
});
test('should return `undefined` for nonexistent keys', 2, function() {
var array = ['a', 'b', 'c'];
var actual = _.removeAt(array, [0, 2, 4]);