1

I'm trying to write a function to check if the array of objects is a subset of another array of objects and I want it to return a boolean.

Here's what I have so far:

var arr1 = [
    { answer: "dispersed", question: "where_is_your_flare_located" },
    { answer: "continuous", question: "what_frequnecy_of_measurement_do_i_require_to_assess_methane_emissions" }
];

var arr2 = [
    { question: 'where_is_your_flare_located', answer: 'dispersed' },
    { question: 'what_frequnecy_of_measurement_do_i_require_to_assess_methane_emissions', answer: 'periodic' },
    { question: 'how_long_is_the_flare_expected_to_be_in_operation', answer: 'n_a' },
    { question: 'am_i_managing_an_existing_flare_or_planning_to_install_a_new_one', answer: 'n_a' },
    { question: 'do_i_have_access_to_assistance_gases', answer: '' },
    { question: 'do_i_have_access_to_purge_gas', answer: '' },
];

var compare = arr2.filter(function(o) {
    var resultQuestion = o.question;
    var resultAnswer = o.question;

    return arr1.some(function(i) {
        var filterQuestion = i.question;
        var filterAnswer = i.question;
        return ((filterQuestion === resultQuestion) && (resultAnswer === filterAnswer));
    });
});

console.log(compare)

I don't understand what I'm doing wrong. I will appreciate any help or explanation.

6
  • So you want to return true if all elements in arr1 appear in arr2? Commented Dec 7, 2021 at 16:25
  • "...what I'm doing wrong." - Why do you think there's something wrong with your script? Explain the actual behavior and add any error messages you might see in the console (How do I ask a good question?) Commented Dec 7, 2021 at 16:27
  • 1
    Either a dup, or a useful read: stackoverflow.com/a/48211214/294949. Commented Dec 7, 2021 at 16:28
  • "The filter() method creates a new array with all elements that pass the test implemented by the provided function." Commented Dec 7, 2021 at 16:28
  • 1
    You assign var resultAnswer = o.question; but this should likely be var resultAnswer = o.answer;. You have the same issue with filterAnswer. Commented Dec 7, 2021 at 16:31

1 Answer 1

3

This is simply a case of seeing if every element in arr1 exists in arr2

var arr1 = [
    { answer: "dispersed", question: "where_is_your_flare_located" },
    { answer: "continuous", question: "what_frequnecy_of_measurement_do_i_require_to_assess_methane_emissions" }
    
    // comment the above and uncomment below to return true 
    //{ answer: "periodic", question: "what_frequnecy_of_measurement_do_i_require_to_assess_methane_emissions" }
];

var arr2 = [
    { question: 'where_is_your_flare_located', answer: 'dispersed' },
    { question: 'what_frequnecy_of_measurement_do_i_require_to_assess_methane_emissions', answer: 'periodic' },
    { question: 'how_long_is_the_flare_expected_to_be_in_operation', answer: 'n_a' },
    { question: 'am_i_managing_an_existing_flare_or_planning_to_install_a_new_one', answer: 'n_a' },
    { question: 'do_i_have_access_to_assistance_gases', answer: '' },
    { question: 'do_i_have_access_to_purge_gas', answer: '' },
];

const isSubset = arr1.every(a1 => arr2.find(a2 => a1.answer == a2.answer && a1.question == a2.question));

console.log(isSubset);

Sign up to request clarification or add additional context in comments.

2 Comments

It would be more pure to use .some(), it returns a boolean value, whereas .find() returns the first matching object (which is then treated as a bool). The final result will be the same.
This has worked perfectly for me! Thank you so much!!!!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.