{"ScriptPreparationCode":"const pickPathsLodash = (paths, obj) =\u003E\r\n _.reduce(\r\n paths,\r\n (result, path) =\u003E {\r\n const value = _.get(obj, path);\r\n if (value !== undefined) {\r\n _.set(result, path, value);\r\n }\r\n return result;\r\n }, {}\r\n );\r\n\r\nconst pickPathsRamda = R.curry((paths, obj) =\u003E\r\n R.reduce(\r\n (acc, path) =\u003E {\r\n const value = R.path(path, obj);\r\n return value !== undefined ? R.assocPath(path, value, acc) : acc;\r\n }, {},\r\n paths\r\n )\r\n);\r\n\r\nconst largeSourceObject = {};\r\nconst pathsToKeep = [];\r\nconst pathsToKeepLodash = [];\r\n\r\nfor (let i = 0; i \u003C 50; i\u002B\u002B) {\r\n _.set(largeSourceObject, \u0060level1_${i}.level2.level3\u0060, { value: i, timestamp: Date.now() });\r\n // We\u0027ll pick about half of the paths\r\n if (i % 2 === 0) {\r\n pathsToKeep.push([\u0060level1_${i}\u0060, \u0027level2\u0027, \u0027level3\u0027, \u0027value\u0027]);\r\n pathsToKeepLodash.push(\u0060level1_${i}.level2.level3.value\u0060);\r\n }\r\n}","TestCases":[{"Name":"lodash deepPick","Code":"pickPathsLodash(pathsToKeepLodash, largeSourceObject);","IsDeferred":false},{"Name":"ramda deepPick","Code":"pickPathsRamda(pathsToKeep, largeSourceObject);","IsDeferred":false}]}