Skip to content

Commit f25dcf5

Browse files
committed
fix(IndexedSequence.reverse): offset indexes when accessing a reversed sequence
1 parent e41d99e commit f25dcf5

File tree

4 files changed

+35
-9
lines changed

4 files changed

+35
-9
lines changed

__tests__/IndexedSequence.ts

+12
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,16 @@ describe('IndexedSequence', () => {
2424
expect(operated.first()).toEqual('B');
2525
});
2626

27+
it('reverses correctly', () => {
28+
var seq = Immutable.Sequence.from(['A', 'B', 'C', 'D', 'E']);
29+
30+
// This is what we expect for IndexedSequences
31+
var operated = seq.reverse();
32+
expect(operated.get(0)).toEqual('E');
33+
expect(operated.get(1)).toEqual('D');
34+
expect(operated.get(4)).toEqual('A');
35+
36+
expect(operated.first()).toEqual('E');
37+
expect(operated.last()).toEqual('A');
38+
});
2739
});

dist/Immutable.js

+11-3
Original file line numberDiff line numberDiff line change
@@ -1167,6 +1167,7 @@ function mapFactory(sequence, mapper, context) {
11671167
return mappedSequence;
11681168
}
11691169
function reverseFactory(sequence) {
1170+
var isIndexedSequence = (sequence instanceof IndexedSequence);
11701171
var reversedSequence = sequence.__makeSequence();
11711172
reversedSequence.length = sequence.length;
11721173
reversedSequence.reverse = (function() {
@@ -1179,9 +1180,16 @@ function reverseFactory(sequence) {
11791180
});
11801181
return flipSequence;
11811182
};
1182-
reversedSequence.get = (function(key, notSetValue) {
1183-
return sequence.get(key, notSetValue);
1184-
});
1183+
if (isIndexedSequence) {
1184+
var reverseIndexOffset = sequence.length - 1;
1185+
reversedSequence.get = (function(key, notSetValue) {
1186+
return sequence.get(reverseIndexOffset - key, notSetValue);
1187+
});
1188+
} else {
1189+
reversedSequence.get = (function(key, notSetValue) {
1190+
return sequence.get(key, notSetValue);
1191+
});
1192+
}
11851193
reversedSequence.has = (function(key) {
11861194
return sequence.has(key);
11871195
});

0 commit comments

Comments
 (0)