From f37500e91f11f93bf6a8333a292995fbe0fd644e Mon Sep 17 00:00:00 2001 From: Peter Morlion Date: Thu, 29 Oct 2020 20:40:46 +0100 Subject: [PATCH] Add support for arrays --- index.js | 8 ++++++++ test.js | 11 +++++++++++ 2 files changed, 19 insertions(+) diff --git a/index.js b/index.js index fef5f36..a7c1eac 100644 --- a/index.js +++ b/index.js @@ -37,6 +37,14 @@ function set(target, path, value, options) { for (let i = 0; i < len; i++) { let prop = keys[i]; + if (i < len - 1 && !isNaN(keys[i + 1]) && !target[prop]) { + target[prop] = []; + } + + if (!isNaN(prop)) { + target.push({}); + } + if (!isObject(target[prop])) { target[prop] = {}; } diff --git a/test.js b/test.js index ea93097..0764c49 100644 --- a/test.js +++ b/test.js @@ -70,6 +70,17 @@ describe('set', function() { assert.deepEqual(o.a[2].c, {y: 'z'}); }); + it('should create an array if it does not already exist', function() { + var o = {}; + set(o, 'a.0.a', {y: 'z'}); + set(o, 'a.1.b', {y: 'z'}); + set(o, 'a.2.c', {y: 'z'}); + assert(Array.isArray(o.a)); + assert.deepEqual(o.a[0].a, {y: 'z'}); + assert.deepEqual(o.a[1].b, {y: 'z'}); + assert.deepEqual(o.a[2].c, {y: 'z'}); + }); + it('should create a deeply nested property if it does not already exist', function() { var o = {}; set(o, 'a.b.c.d.e', 'c');