Ways to utilize a reduce function for field filtering within an object

Can someone help me create a filterStringFields function that accepts an object as input and outputs a new object containing only string-type fields? Here are some examples:

Input: { name: 'John', age: 25, city: 'New York' }
Output: { name: 'John', city: 'New York' }
Input: { isActive: true, score: 100 }
Output: {}

Answer №1

To begin, ensure that the input object contains only string values by checking and converting non-string values into a new Object. Utilize "Object.keys" method along with reduce to manipulate the object efficiently.

Here's an example of how it can be achieved:

const newObj = return Object.keys(obj).reduce(  
    (acc, rec) => {  
      if (typeof obj[rec] === 'string') {  
        return { ...acc, [rec]: obj[rec] }  
      }  
      return acc     
    },  
    {}
  )

You simply need to integrate this code snippet into your function.

Answer №2

If you're not specifically focused on using the reduce method, you can streamline your code by utilizing Object.entries along with Object.fromEntries.

const person1 = { name: "Alice", age: 30 };
const person2 = { age: 25 };

const filterObjects = obj =>
  Object.fromEntries(
    Object.entries(obj).filter(([, value]) => typeof value === "number")
  );

console.log(filterObjects(person1));
console.log(filterObjects(person2));

Similar questions

If you have not found the answer to your question or you are interested in this topic, then look at other similar questions below or use the search

Can you show me a way to iterate through table elements and extract data using JQuery?

On my HTML 4.01 Transitional page, I have an html table structured as follows: <table> <thead> <tr> <th>Col 1</th> <th>Col 2</th> <th>etc...</th> </tr> </thead> ...

Adding a dynamic key-value pair object to an array using the JS push method

In my programming challenge, I am dealing with an array of objects that have dynamic keys and values. The structure is a bit complicated, but here's a simplified version: let products_row = [ { id: 1, category_id: 11, options: { &a ...

Attempting to modify the background hue of a Bootstrap 5 Button using javascript

I've been experimenting with changing the background color of a bootstrap 5 button using JavaScript. While I've been able to successfully change the text color with JavaScript, altering the button's color has proven to be elusive. Below is ...

Utilizing JavaScript to enable a Bootstrap 5 dropdown menu to open on hover for desktop users and be clickable for mobile users

I am currently using Bootstrap 5 to design a website and I'm facing an issue with creating a navbar dropdown. On desktop, I want the dropdown to open on hover and redirect the user to a new page when clicked. However, on mobile devices, I only want th ...

Tips for concealing a complete class without causing any issues

My attempt at creating a quiz feature has been a challenge. I wanted each section of the quiz to open as I move through the questions. Here are the initial two parts of the quiz. function initialize() { var section = document.getElementsByClassName("p ...

Replacing menu styling with JavaScript using C#

I'm currently working on a C# project to develop a smartphone-friendly website for motorists to easily pay their parking fees. However, I'm facing some challenges with the menu design. My goal is to have a white menu with black text, where the cu ...

Is there a way to retrieve the final value from an Observable?

Trying to retrieve the last value from an observable. Here is an example of the code: // RxJS v6+ import { lastValueFrom, Subject } from 'rxjs'; import { scan } from 'rxjs/operators'; async function main() { const subject = new Subje ...

Velocity: The initial parameter was not recognized as a property mapping

I've been experimenting with Velocity for animations (without jQuery), but I'm running into an issue where I keep getting this error message: Velocity: First argument ([object HTMLDivElement]) was not a property map, a known action, or a regis ...

Loop through the tabs array and display varying views based on conditionals

I am currently working on building tabs and tab panels iteratively to display information, but I am facing issues in getting the desired output. For each name in a list, I need to create a tab and a corresponding tab panel underneath it. For example, the ...

Django: Is there a way to modify the PayPal script for pay upon arrival?

I currently do not wish to accept online payments on my e-commerce site. Instead, I would like the courier to handle package delivery and collection of fees. How can I modify the PayPal script to bypass validations and only register payments upon arrival? ...

Using Node to parse XLSX files and generate JSON data

Hello, I am currently utilizing the js-xlsx package which can be found at this link. My inquiry is how to successfully parse an xlsx file with merges and convert it into JSON format. You can view what the excel sheet looks like here. Ultimately, the JSON o ...

How can I dynamically update the value of an ng-option based on the selection of another ng-option?

My application has 2 select option boxes. The first box contains a list of countries, and I want the second box to update its values based on the selection made in the first box. For instance, if I choose India from the first select box, the second select ...

Exploring the capabilities of jest-next-dynamic through dynamic imports in Jest testing

Currently, I am in the process of testing dynamic imports in Next.js version 10.2.3. To achieve this, I decided to utilize the jest-next-dynamic library to prevent any potential errors from occurring. However, during my testing, I encountered a TypeError ...

Updating row values in an Angular table

I have a reusable table with the [cellData]="row" attribute to populate each cell on the table (see sample table in the screenshot). My question is, how can we replace the null values on the template with "---" so that instead of displ ...

Enhancing MongoDB following a successful transaction with Stripe API

Currently, I am developing an E-Store using Express.js, MongoDB, and Stripe. This is my first project that involves handling transactions and working with databases. The structure of my project is quite unique where product information is stored in MongoD ...

When using the keyboard to navigate, the aria-label attribute is not being properly recognized

<span class="phone" aria-label="phone number 9 4 9 . 5 5 5 . 1 2 3 4">949.555.1234</span> This code snippet displays a phone number on the webpage. When clicking on the phone number, it reads the aria-label as intended. However, if you navigat ...

Issue: Module '/Users/MYNAME/Desktop/Projects/MYPROJECTNAME' not found

I am currently in the process of compiling Node using TypeScript, and I'm still getting acquainted with it. An issue I encountered was that my /src files were not being updated when I made changes and restarted the server. To troubleshoot, I decided ...

Vue.js methods bound as properties on a parent object

There are times when I come across scenarios where it would be convenient to bind methods as an object property rather than a direct Vue method. For instance, instead of: <MyInput :formatter="currencyFormat" :parser="currencyParser& ...

What significance does this terminal hold? (utilizing Next.js next/router)

Currently, I am in the process of developing a portfolio website using Next.js and tailwind css with ReactJs (without typescript). One issue that I encountered was with the Router(next/router) functionality. Despite my attempts to find a suitable sample, c ...

JavaScript design not aligning

I'm currently attempting to find a pattern that includes the pipe (|) operator. Here is the code I've used to match the pattern: var format = /[ \\|]/; // This is the pattern for matching the pipe pattern if ("Near raghavendra temple ...