Skip to content

Commit 92aba3b

Browse files
committed
Completed get-object-path function.
1 parent 9df8818 commit 92aba3b

File tree

2 files changed

+80
-0
lines changed

2 files changed

+80
-0
lines changed

objects/get-object-path/index.js

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
/**
2+
* @author: "Chisimdi Damian Ezeanieto"
3+
* @date: "05/07/2023"
4+
*
5+
*/
6+
7+
// function getObjectPath(obj, state = '') {
8+
// const result = {};
9+
// // Use a recursive statement
10+
// // the base case will be a number
11+
// console.log(obj)
12+
// for(let key in obj) {
13+
// const value = obj[key];
14+
// const preKey = state ? `${state}.${key}` : key;
15+
16+
// if (typeof value === 'object' && value !== null) {
17+
// const challengeResult = getObjectPath(value, preKey);
18+
19+
// Object.assign(result, challengeResult);
20+
// } else {
21+
// result[preKey] = value;
22+
// }
23+
// }
24+
// return result;
25+
// }
26+
27+
// Using generator function
28+
function getObjectPath(args) {
29+
function* generatorFunction(obj, state = '') {
30+
const result = {};
31+
32+
for(let key in obj) {
33+
const preKey = state ? `${state}.${key}` : key;
34+
if (typeof obj[key] === 'object') {
35+
yield [...generatorFunction(obj[key], preKey)].flat()
36+
} else {
37+
result[preKey] = obj[key];
38+
yield result;
39+
}
40+
}
41+
}
42+
43+
const generator = generatorFunction(args);
44+
return [...generator].flat().reduce((acc, curr) => Object.assign(acc, curr), {})
45+
}
46+
47+
module.exports = getObjectPath;

objects/get-object-path/test.js

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/*
2+
* @author: Chisimdi Damian Ezeanieto
3+
* @date: 05/07/2023
4+
*/
5+
const getObjectPath = require('./index');
6+
test('getObjectPath is a function', () => {
7+
expect(typeof getObjectPath).toEqual('function');
8+
});
9+
test("getObjectPath '{j: { a: { b: { c: 1, f: 2 }, g: 3 }, d: 2 }, a: { r: { f: 3}}}' to give 3", () => {
10+
expect(getObjectPath({j: { a: { b: { c: 1, f: 2 }, g: 3 }, d: 2 }, a: { r: { f: 3}}})).toEqual({
11+
'j.a.b.c': 1,
12+
'j.a.b.f': 2,
13+
'j.a.g': 3,
14+
'j.d': 2,
15+
'a.r.f': 3
16+
});
17+
});
18+
test("getObjectPath '{ a: { b: { c: 1, f: 2 }, g: 3 }, d: 2 }' to give 5", () => {
19+
expect(getObjectPath({ a: { b: { c: 1, f: 2 }, g: 3 }, d: 2 })).toEqual({
20+
'a.b.c': 1,
21+
'a.b.f': 2,
22+
'a.g': 3,
23+
d: 2
24+
});
25+
});
26+
test("getObjectPath '{ b: { c: 1, f: 2 }, g: 3 }' to give 6", () => {
27+
expect(getObjectPath({ b: { c: 1, f: 2 }, g: 3 })).toEqual({ 'b.c': 1, 'b.f': 2, g: 3 });
28+
});
29+
30+
// {j: { a: { b: { c: 1, f: 2 }, g: 3 }, d: 2 }, a: { r: { f: 3}}} to give
31+
32+
33+
// to give

0 commit comments

Comments
 (0)