From c2588292cee15626d02bfde9498a27bcdd88e03d Mon Sep 17 00:00:00 2001 From: Jordan Eldredge Date: Mon, 1 Jan 2018 13:01:03 -0800 Subject: [PATCH] Add spliceIn utility function --- js/utils.js | 6 ++++++ js/utils.test.js | 16 +++++++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/js/utils.js b/js/utils.js index 855843b6..4017b81e 100644 --- a/js/utils.js +++ b/js/utils.js @@ -187,3 +187,9 @@ export const filterObject = (obj, predicate) => } return newObj; }, {}); + +export const spliceIn = (original, start, newValues) => { + const newArr = [...original]; + newArr.splice(start, 0, ...newValues); + return newArr; +}; diff --git a/js/utils.test.js b/js/utils.test.js index c519563e..a9c8792e 100644 --- a/js/utils.test.js +++ b/js/utils.test.js @@ -9,7 +9,8 @@ import { normalize, denormalize, segment, - moveSelected + moveSelected, + spliceIn } from "./utils"; const fixture = filename => @@ -215,3 +216,16 @@ describe("moveSelected", () => { expect(moveSelected(arr, i => arr[i], -1)).toEqual([false, true, false]); }); }); + +describe("spliceIn", () => { + it("is immutable", () => { + const original = [1, 2, 3]; + const spliced = spliceIn(original, 1, [200]); + expect(spliced).not.toBe(original); + expect(original).toEqual([1, 2, 3]); + }); + it("adds values at the given index", () => { + const spliced = spliceIn([1, 2, 3], 1, [200]); + expect(spliced).toEqual([1, 200, 2, 3]); + }); +});