Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

110
Views
Javascript reduce() on an Object

I have a javascript object below:

let filters = {
     numbers: {
            '0': 'is_no_selected',
            '1': 'is_one_selected',
            '2': 'is_two_selected',
            '3': 'is_three_selected',
            '4': 'is_four_selected',
            '5': 'is_five_selected',
          },
     words: {
            please: 'is_please_selected',
            help: 'is_help_selected',
            me: 'is_me_selected',
     },
}

And I got two input:'numbers' and ['4','5']

I want to get:

{
            numbers: {
                'is_no_selected': false,
                'is_one_selected': false,
                'is_two_selected': false,
                'is_three_selected': false,
                'is_four_selected': true,
                'is_five_selected': true,
            }
}

And when I input other two input:'words' and ['please']

I want to get:

{
            words: {
                'is_please_selected': true,
                'is_help_selected': false,
                'is_me_selected': false,
            }
}

How to make this happen using reduce()?

about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

Here you go. Not how I would have done it, but if you must use reduce, you can do it like this.

let filters = {
  numbers: {
    '0': 'is_no_selected',
    '1': 'is_one_selected',
    '2': 'is_two_selected',
    '3': 'is_three_selected',
    '4': 'is_four_selected',
    '5': 'is_five_selected',
  },
  words: {
    please: 'is_please_selected',
    help: 'is_help_selected',
    me: 'is_me_selected',
  },
}

var numbers = filter(filters, 'numbers', ['4', '5']);
var words = filter(filters, 'words', ['please']);

console.log(numbers);
console.log(words);

function filter(filter_obj, key, input) {
  return {
    [key]: Object.keys(filters[key]).reduce((a, c) => {
      a[filters[key][c]] = input.includes(c)
      return a;
    }, {})
  }
}

about 4 years ago · Juan Pablo Isaza Report

0

You need to get the entries of the object before using reduce:

let filters = {
     numbers: {
            '0': 'is_no_selected',
            '1': 'is_one_selected',
            '2': 'is_two_selected',
            '3': 'is_three_selected',
            '4': 'is_four_selected',
            '5': 'is_five_selected',
          },
     words: {
            please: 'is_please_selected',
            help: 'is_help_selected',
            me: 'is_me_selected',
     },
}

function fn(obj, filterKey, filters) {
  filters = filters.map(x => ''+x); // convert all filters to strings (keys are always string)
  return Object
    .keys(obj)
    .filter(x => x === filterKey) // only the selected property
    .map(x => obj[x]) // get the object
    .map(x => {
      return Object.entries(x).reduce((out, curr) => {
        const [key, val] = curr;
        out[val] = filters.includes(key);
        return out;
      }, {})
    });
}

console.log(fn(filters, 'numbers', [0]))

about 4 years ago · Juan Pablo Isaza Report

0

A Basic solution:

function filter(all_option, select_key, select_option) {
    let ret = {};
    let s_f = all_option[select_key];
    for (let k in s_f) {
        if (select_option.includes(k)) {
            ret[s_f[k]] = true;
        } else {
            ret[s_f[k]] = false;
        }
    }
    return ret;
}

convert it to map reduce version:

function filter(all_option, select_key, select_option) {
    let ret = {};
    let s_f = all_option[select_key];
    Object.keys(s_f).map(k => {
        if (select_option.includes(k)) {
            ret[s_f[k]] = true;
        } else {
            ret[s_f[k]] = false;
        }
    });
    return ret;
}
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!