Skip to content

Commit a68f550

Browse files
Merge pull request #26 from petermorlion/array-support
Add support for arrays
2 parents fb3e52d + 0dc7ff3 commit a68f550

File tree

2 files changed

+23
-4
lines changed

2 files changed

+23
-4
lines changed

index.js

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,15 +37,23 @@ function set(target, path, value, options) {
3737
for (let i = 0; i < len; i++) {
3838
let prop = keys[i];
3939

40-
if (i === len - 1) {
41-
result(target, prop, value, merge);
42-
break;
40+
if (i < len - 1 && !isNaN(keys[i + 1]) && !target[prop]) {
41+
target[prop] = [];
42+
}
43+
44+
if (!isNaN(prop)) {
45+
target.push({});
4346
}
4447

4548
if (!isObject(target[prop])) {
4649
target[prop] = {};
4750
}
4851

52+
if (i === len - 1) {
53+
result(target, prop, value, merge);
54+
break;
55+
}
56+
4957
target = target[prop];
5058
}
5159

@@ -107,4 +115,4 @@ function isObject(val) {
107115
}
108116

109117
set.memo = {};
110-
module.exports = set;
118+
module.exports = set;

test.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,17 @@ describe('set', function() {
8181
assert.deepEqual(o.a[2].c, {y: 'z'});
8282
});
8383

84+
it('should create an array if it does not already exist', function() {
85+
var o = {};
86+
set(o, 'a.0.a', {y: 'z'});
87+
set(o, 'a.1.b', {y: 'z'});
88+
set(o, 'a.2.c', {y: 'z'});
89+
assert(Array.isArray(o.a));
90+
assert.deepEqual(o.a[0].a, {y: 'z'});
91+
assert.deepEqual(o.a[1].b, {y: 'z'});
92+
assert.deepEqual(o.a[2].c, {y: 'z'});
93+
});
94+
8495
it('should create a deeply nested property if it does not already exist', function() {
8596
var o = {};
8697
set(o, 'a.b.c.d.e', 'c');

0 commit comments

Comments
 (0)