From 0cdc978e6a8b123fba0833cd1d9ba139566b3405 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jessica=20Po=C3=A9mape?= Date: Tue, 1 Sep 2020 08:56:15 -0600 Subject: [PATCH] fixing renameAll to allow a from and a to to have the same name --- src/renameAll.js | 23 +++++++++++++++++------ test/renameAll.js | 12 +++++++++--- 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/src/renameAll.js b/src/renameAll.js index a018b19..95dd9dc 100644 --- a/src/renameAll.js +++ b/src/renameAll.js @@ -2,22 +2,33 @@ const curry = require('ramda/src/curry') // renameAll :: { k: v } -> { k: v } -> { k: v } const renameAll = (renames, obj) => { - obj = Object.assign({}, obj) + const newObj = {} + const tosMap = {} + + for (let k in obj) { + newObj[k] = obj[k] + } for (let frum in renames) { - if (!(frum in obj)) continue + if (!(frum in obj)) { + continue + } const to = renames[frum] if (typeof to === 'object') { - obj[frum] = renameAll(to, obj[frum]) + newObj[frum] = renameAll(to, obj[frum]) } else { - obj[to] = obj[frum] - delete obj[frum] + tosMap[to] = true + newObj[to] = obj[frum] + + if (!tosMap[frum]) { + delete newObj[frum] + } } } - return obj + return newObj } module.exports = curry(renameAll) diff --git a/test/renameAll.js b/test/renameAll.js index 3174eb3..fc09196 100644 --- a/test/renameAll.js +++ b/test/renameAll.js @@ -8,7 +8,9 @@ describe('renameAll', () => { name: 'bird', sounds: { call: 'chirp' - } + }, + title: 'My title', + latestTitle: 'haha (business)', } const renames = { @@ -16,7 +18,9 @@ describe('renameAll', () => { count: 'number', sounds: { call: 'say' - } + }, + latestTitle: 'title', + title: 'updatedTitle', } const expected = { @@ -24,7 +28,9 @@ describe('renameAll', () => { name: 'bird', sounds: { say: 'chirp' - } + }, + title: 'haha (business)', + updatedTitle: 'My title', } it('renames multiple nested properties on an object using a name-map', () =>