diff --git a/README.md b/README.md index 3999f55..30ae03c 100644 --- a/README.md +++ b/README.md @@ -33,4 +33,5 @@ This is a tiny library of javascript functions, currently comprising: - isEqual - inPlaceShuffle - regularShuffle +- checkNested diff --git a/src/checkNested.js b/src/checkNested.js new file mode 100644 index 0000000..b9212ff --- /dev/null +++ b/src/checkNested.js @@ -0,0 +1,35 @@ +/** + * A function to deeply compare objects + * @param {Object} obj - Object to examine + * @param {String} key you are searching for + * @return {Boolean} + */ + +const checkNested = (object, searchKey) => { + // If bad input, return false: + if (object === null || object === undefined) { + return false; + } + + for (let key of Object.keys(object)) { + // Iterate through keys for match: + if (key === searchKey) { + return true; + } else { + const aNestedObject = object[key]; + + // If key isn't a match, try to see if the key's value is an object. + // if it is, we need to search through it's keys: + if (typeof aNestedObject === 'object') { + // We can recursively search for our searchKey in + // nested value, passing in objectSubKey (nested object) this time: + if (checkNested(aNestedObject, searchKey) === true) { + return true; + } + } + } + } + return false; +}; + +module.exports = checkNested; diff --git a/src/index.js b/src/index.js index 2caf557..df747bb 100644 --- a/src/index.js +++ b/src/index.js @@ -5,6 +5,7 @@ export { default as peek } from './peek.js'; export { default as sieveOfE } from './sieveOfE.js'; export { default as sort } from './sort.js'; export { default as camelCase } from './camelCase.js'; +export { default as checkNested } from './checkNested'; export { default as isEqual } from './isEqual'; export { default as inPlaceShuffle } from "./inPlaceShuffle.js"; export { default as regularShuffle } from "./regularShuffle.js"; diff --git a/src/tests/checkNested.test.js b/src/tests/checkNested.test.js new file mode 100644 index 0000000..52ae5f5 --- /dev/null +++ b/src/tests/checkNested.test.js @@ -0,0 +1,27 @@ +const expect = require('chai').expect; +const checkNested = require('../').checkNested; + +describe('checkNested', () => { + it('returns true if object contains search key', () => { + const object = { + name: { + first: 'Pete', + favorite: { + color: 'blue', + }, + }, + }; + expect(checkNested(object, 'favorite')).to.equal(true); + }); + it('returns false if object does not contain search key', () => { + const object = { + name: { + first: 'Pete', + favorite: { + color: 'blue', + }, + }, + }; + expect(checkNested(object, 'movie')).to.equal(false); + }); +});