Sub Set Data Structure help

Tell us what’s happening:
I am trying to use every to return a boolean that will determine if every element in firstSet is contained in otherset. All but the 2nd and 3rd test passed and I am confused as to what to troubleshoot to get all the tests to pass.

Your code so far


function Set() {
// the var collection will hold the set
var collection = [];
// this method will check for the presence of an element and return true or false
this.has = function(element) {
    return (collection.indexOf(element) !== -1);
};
// this method will return all the values in the set
this.values = function() {
    return collection;
};
// this method will add an element to the set
this.add = function(element) {
    if(!this.has(element)){
        collection.push(element);
        return true;
    }
    return false;
};
// this method will remove an element from a set
this.remove = function(element) {
    if(this.has(element)){
       var index = collection.indexOf(element);
        collection.splice(index,1);
        return true;
    }
    return false;
};
// this method will return the size of the collection
this.size = function() {
    return collection.length;
};
// this method will return the union of two sets
this.union = function(otherSet) {
    var unionSet = new Set();
    var firstSet = this.values();
    var secondSet = otherSet.values();
    firstSet.forEach(function(e){
        unionSet.add(e);
    });
    secondSet.forEach(function(e){
        unionSet.add(e);
    });
    return unionSet;
};
// this method will return the intersection of two sets as a new set
this.intersection = function(otherSet) {
    var intersectionSet = new Set();
    var firstSet = this.values();
    firstSet.forEach(function(e){
        if(otherSet.has(e)){
            intersectionSet.add(e);
        }
    });
    return intersectionSet;
};
// this method will return the difference of two sets as a new set
this.difference = function(otherSet) {
    var differenceSet = new Set();
    var firstSet = this.values();
    firstSet.forEach(function(e){
        if(!otherSet.has(e)){
            differenceSet.add(e);
        }
    });
    return differenceSet;
};
// change code below this line
this.subset = function(otherSet){
     
     var firstSet = this.values();
return firstSet.every(function(e){
        otherSet.has(e);
        
    });

    //return subset

}
// change code above this line
};
let SetA = new Set();
let SetB = new Set();
SetA = ['a','b']
SetB = ['a','b','c','d']
console.log(SetA.subset(SetB))

Your browser information:

User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36.

Challenge: Perform a Subset Check on Two Sets of Data

Link to the challenge:
https://www.freecodecamp.org/learn/coding-interview-prep/data-structures/perform-a-subset-check-on-two-sets-of-data

You missed a return statemement here:

 otherSet.has(e);

:walking_man:

Can you please explain to me the syntax? That worked but I do not understand why I have to use the return statement twice.

Thanks

You have to return values from functions to make them resolve to a value, and it’s in a function, so like

function add (a, b) {
  return a + b;
}

It doesn’t matter where in your code you define that, if you don’t return the a + b it ain’t gonna give you a result, you’ll just get undefined

That makes sense, I did not notice that it was a function within a function the first glance at it. Thanks again.

1 Like