Mix of strings and objects in an array transformed with Lodash

My task involves converting an array that consists of a mix of objects and strings into another object array.

The initial array:

[
  {"text": "Address"},
  {"text": "NewTag"},
  {"text": "Tag"},
  "Address",
  "Name",
  "Profile",
  {"text": "Name"},
]

The desired output array:

[
  {"Tag": "Address", Count: 2},
  {"Tag": "Name", Count: 2},
  {"Tag": "NewTag", Count: 1},
  {"Tag": "Profile", Count: 1},
  {"Tag": "Tag", Count: 1},
]

This is the code I have written to achieve this goal:

var tags = [], tansformedTags=[];   
for (var i = 0; i < input.length; i++) {
  if (_.isObject(input[i])) {
    tags.push(input[i]['text']);
  } else {
    tags.push(input[i]);
  }
}
tags = _.countBy(tags, _.identity);
for (var property in tags) {
  if (!tags.hasOwnProperty(property)) {
    continue;
  }
  tansformedTags.push({ "Tag": property, "Count": tags[property] });
}
return _.sortByOrder(tansformedTags, 'Tag');

I am curious to know if there exists a more efficient and elegant approach to solving this problem?

Answer №1

Utilizing the powerful combination of map() and countBy():

_(array)
    .map(function(element) {
        return _.get(element, 'text', element);
    })
    .countBy()
    .map(function(count, text) {
        return { Word: text, Frequency: count };
    })
    .value();

Answer №2

If you want to create a hash table in JavaScript to keep track of the properties in your array, you can utilize Object.create(null). Then, use Object.keys to retrieve the properties and employ map to construct your objects.

var count = Object.create(null);
myArray.forEach(function(element) {
  var property = Object(item) === item ? item.data : item;
  count[property] = (count[property] || 0) + 1;
});
Object.keys(count).sort().map(function(key) {
  return {Property: key, Total: count[key]};
});

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

Effortless Like/Unlike feature with a text button option enhanced with ajax functionality and

Struggling to create a simple Like/Unlike button in PHP without refreshing the page. Despite an abundance of tutorials on AJAX and jQuery, implementation remains elusive due to lack of experience. Uncertain where each part of the code goes within which fil ...

What is the best way to iterate over my JSON data using JavaScript in order to dynamically generate cards on my HTML page?

var data = [ { "name":"john", "description":"im 22", "email":"<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="4c7d7e7f0c2b212d2520622f">[email protected]</a>" }, { "name":"jessie", ...

The process of filtering JSON data in Angular can be easily achieved by utilizing the filter functionality

Seeking recommendations for useful books or online resources to learn how to filter JSON data effectively using angular filters. Interested in tackling more complex datasets. Any assistance on this matter would be greatly appreciated. ...

Why is it that when I use XMLHttpRequest for a menu and request a page with HTML that contains JavaScript, nothing happens?

Below is the code snippet I'm using for a menu in a webpage I am currently developing. In some cases, the page I want to request contains JavaScript, but when the requested page is loaded into the actual page, the script does not run. //Ajax menu all ...

Updating an item stored locally

I am currently working on a web application that utilizes local storage. I have successfully implemented functionality to add and delete items, but I am facing an issue with editing items. Although items can be edited as expected, upon refreshing the page, ...

The functionality of the back button in a JavaScript website only allows users to navigate through their browsing

I'm currently experiencing an issue with the back navigation button on my one-page website. When I load a new page, I use the following code snippet: displayPage = function (page, json) { var stateObj = { "page": page, 'json': j ...

The JavaScriptSerializer::Deserialize() function eliminates any links within the content

In my AutoMapper mapping, I have the following code snippet: AutoMapper.Mapper.CreateMap<Dictionary<string, string>, DailyCheck>().ConvertUsing( x => { JavaScriptSerializer serializer = new JavaScript ...

How can I transfer JSON nodes to a different object via drag-and-drop in a ListView using UWP and C#?

I'm currently developing a UWP application where I have loaded data from a JSON file and stored it. My goal is to implement drag-and-drop functionality within a listview interface to move child objects from one parent object to another. To achieve th ...

Encountering issues accessing the key value 'templateUrl' in Angular6

I have an object in my component.ts file that I need to iterate through in the HTML template using a ui-comp-menu element. menuObject = [{ 'labels': 'Content1', 'templateUrl': 'assets/partials/sample.html ...

Encountered a Json Decoder Error when attempting to load data using json.load within Python

https://i.sstatic.net/4AZHl.pngI am attempting to read a JSON-formatted text file using the code snippet below with open('orderdata/ETHUSDTorder.txt') as json_file: data = json.load(json_file) actualdata=data['average'] prin ...

Leveraging conditional statements for dynamically computed Vue properties

In the Vue site I'm working on, there is a functional button that changes its state when clicked (from "pause" to "resume" and also changes colors). The button functionality itself works perfectly, but I am facing an issue in aligning it with another ...

JavaScript HTTP request causes website navbar animation to malfunction

Currently, I am assisting a client with their static website. This task isn't my primary role, but due to some expertise in this area, I have volunteered to support them. To streamline the process and avoid duplicating HTML code across multiple files, ...

The base tag does not impact the <META HTTP-EQUIV="Refresh" element in any way

Similar Question: How to check for disabled JavaScript? I am attempting to identify whether or not JavaScript is disabled in the user's browser. To achieve this, I have inserted an iframe into the document and set it to refresh every 10 seconds. ...

Making changes to a specific row in a datatable within a Flask project

I need help with creating an edit function for my data table. I only require front-end and a bit of JS (Ajax) code to send the data. The picture below shows what I am trying to achieve: https://i.sstatic.net/9QDXl.png Here is how my data table looks like: ...

Obtaining [Symbol(Response internals)] through a JSON response

I am currently utilizing the library isomorphic-unfetch to retrieve JSON data from a Rest API. Here is my approach for making the request: const res = await fetch( `url` ); To extract the body, I simply do: const response = await res.j ...

The process of departing a SocketIO room and switching to a different room logic

I am wondering how I can leave the Room when I click on a new Room Here is what my page looks like: https://i.sstatic.net/vuwv0.png The list on the left side is from the MySQL Server and it displays a list of my chats. Each Room name has an id value whi ...

Retrieving Json data results in a boolean outcome

I am working on a code snippet that includes a switch statement which returns true or false, as well as an if and else statement for further validation. The goal is to send a value through an input field using ajax and have PHP return true or false based o ...

Obtaining and transferring identifiers for jQuery code execution

My goal is to create a script that dynamically changes the content of a webpage using a foreach array. The HTML structure I am working with looks like this: <div id="bigleftproject"> <p>content to be replaced</p> </div> <div ...

Deleting the stylesheet exclusively within the confines of the React application window

Here is an image that will help illustrate the issue: https://i.stack.imgur.com/VA7fw.png If you want to check out the code sandbox for this problem, you can visit: https://codesandbox.io/s/annoying-stylesheet-2gpejc?file=/public/index.html I am current ...

What steps do I need to take to display my background using JavaScript and CSS?

I am currently attempting to utilize a background image in iScroll's JavaScript. The script appears to use CSS within the JavaScript and allows me to add a background color, but for some reason, it is not allowing me to add an image. Is there a way to ...