Skip to content
Merged
Show file tree
Hide file tree
Changes from 19 commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
dfca479
feat/ add new exercise
nik-rev Mar 23, 2024
329d7d6
feat/ update README
nik-rev Mar 23, 2024
897b2c1
feat/ create tests
nik-rev Mar 23, 2024
59c6768
feat/ create solution
nik-rev Mar 23, 2024
ac605aa
feat/ object is not nested
nik-rev Mar 24, 2024
7146b0d
feat/ improve wording
nik-rev Mar 24, 2024
e4e015d
feat/ wording
nik-rev Mar 24, 2024
90afe10
feat/ wording
nik-rev Mar 24, 2024
cd0a557
feat/ improve readability of solution
nik-rev Mar 24, 2024
db402f7
Merge branch 'feat/exercise_14' of https://github.com/nikitarevenco/j…
nik-rev Mar 24, 2024
15e4bec
feat/ mention that explicit NaN check is not required
nik-rev Mar 24, 2024
c19c1bc
feat/ clarify that we would normally use math.isnan
nik-rev Mar 24, 2024
4873c5a
Update 14_contains/solution/contains-solution.spec.js
nik-rev Mar 24, 2024
360078c
feat/ null check
nik-rev Mar 24, 2024
8c5851d
feat: improve clarity of suggestion
nik-rev Mar 30, 2024
fc2fc72
feat: remove mention of IEEE
nik-rev Mar 30, 2024
019af1d
feat: solution now accounts for children nested objects
nik-rev Mar 30, 2024
ee12fc4
feat: add test to account for children nested objects
nik-rev Mar 30, 2024
cc29bbd
feat: use Josh's solution that uses `some` method
nik-rev Apr 7, 2024
0f87177
feat(contains): add some basic examples
nik-rev Aug 18, 2024
e630a8b
feat(contains): add a more exhaustive test for reference in the object
nik-rev Aug 18, 2024
8829dde
feat(contains): move same reference test to the beginning
nik-rev Aug 20, 2024
de104e3
feat(contains): more concise wording
nik-rev Aug 20, 2024
a204931
feat(contains): copy over tests from solution to spec file
nik-rev Aug 20, 2024
d1c8f2c
fix(contains): change false to true for example which is true
nik-rev Aug 23, 2024
2bc1c95
fix: spelling mistake
nik-rev Feb 11, 2025
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions 14_contains/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Exercise 14 - contains

Write a function that searches for a value in a nested object. It returns true if the object contains that value.
6 changes: 6 additions & 0 deletions 14_contains/contains.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
const contains = function() {

};

// Do not edit below this line
module.exports = contains;
15 changes: 15 additions & 0 deletions 14_contains/contains.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
const contains = require('./contains');

describe('contains', () => {
test('First test description', () => {
// Replace this comment with any other necessary code, and update the expect line as necessary

expect(contains()).toBe('');
});

test.skip('Second test description', () => {
// Replace this comment with any other necessary code, and update the expect line as necessary

expect(contains()).toBe('');
});
});
20 changes: 20 additions & 0 deletions 14_contains/solution/contains-solution.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
const contains = function (object, searchValue) {
const values = Object.values(object);

// NaN === NaN evaluates to false
// Normally, we would have to do an explicit Number.isNaN() check to compare NaN equality
// However, Array.prototype.includes automatically handles this for us
if (values.includes(searchValue)) return true;

const nestedObjects = values.filter(
// typeof null === 'object' evaluates to true ¯\_(ツ)_/¯
(value) => typeof value === "object" && value !== null
);

return nestedObjects.some((nestedObject) =>
contains(nestedObject, searchValue)
);
};

// Do not edit below this line
module.exports = contains;
55 changes: 55 additions & 0 deletions 14_contains/solution/contains-solution.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
const contains = require("./contains-solution");

describe("contains", () => {
const object = {
data: {
duplicate: "e",
stuff: {
thing: {
banana: NaN,
moreStuff: {
something: "foo",
answer: [42],
},
},
},
info: {
duplicate: "e",
magicNumber: 44,
empty: null,
},
},
};

test("true if the provided number is a value within the object", () => {
expect(contains(object, 44)).toBe(true);
});

test("true if the provided string is a value within the object", () => {
expect(contains(object, "foo")).toBe(true);
});

test("does not convert input string into a number when searching for a value within the object", () => {
expect(contains(object, "44")).toBe(false);
});

test("false if the provided string is not a value within the object", () => {
expect(contains(object, "bar")).toBe(false);
});

test("true if provided string is within the object, even if duplicated", () => {
expect(contains(object, "e")).toBe(true);
});

test("false if the provided value exists but is not a primitive", () => {
expect(contains(object, [42])).toBe(false);
});

test("true if NaN is a value within the object", () => {
expect(contains(object, NaN)).toBe(true);
});

test("false if the provided value exists and is null", () => {
expect(contains(object, null)).toBe(true);
});
});