diff --git a/spec/providers/database.spec.ts b/spec/providers/database.spec.ts index 89265b167..3dbdef63e 100644 --- a/spec/providers/database.spec.ts +++ b/spec/providers/database.spec.ts @@ -137,6 +137,12 @@ describe('DeltaSnapshot', () => { populate({ myKey: 'foo', myOtherKey: 'bar' }, { myKey: null }); expect(subject.val()).to.deep.equal({ myOtherKey: 'bar' }); }); + + // Regression test: .val() was returning array of nulls when there's a property called length (BUG#37683995) + it('should return correct values when data has "length" property', () => { + populate(null, { length: 3, foo: 'bar' }); + expect(subject.val()).to.deep.equal({ length: 3, foo: 'bar'}); + }); }); describe('#child(): DeltaSnapshot', () => { diff --git a/src/providers/database.ts b/src/providers/database.ts index 99de9a94b..4e7f399e8 100644 --- a/src/providers/database.ts +++ b/src/providers/database.ts @@ -248,7 +248,9 @@ export class DeltaSnapshot implements firebase.database.DataSnapshot { let numKeys = 0; let maxKey = 0; let allIntegerKeys = true; - _.forEach(node, (childNode, key) => { + for (let key in node) { + if (!node.hasOwnProperty(key)) { continue; } + let childNode = node[key]; obj[key] = this._checkAndConvertToArray(childNode); numKeys++; const integerRegExp = /^(0|[1-9]\d*)$/; @@ -257,7 +259,7 @@ export class DeltaSnapshot implements firebase.database.DataSnapshot { } else { allIntegerKeys = false; } - }); + } if (allIntegerKeys && maxKey < 2 * numKeys) { // convert to array.