Split an array into several sub-arrays using index ranges with Ramda JS

Is there a clever way to transform an array into a dictionary of sub-arrays using specified indices in Ramda?

const originalArray = ["A", "B", "C", "D", "E"];
const indicesToSplit = [0, 0, 1, 0, 3];
    
// Desired output:
R.split(indicesToSplit, originalArray) // { "0": ["A", "B", "D"], "1": ["C"], "3": ["E"] }

Looking for an elegant solution using Ramda library. Any ideas?

Answer №1

Utilize the R.zip function to merge the arrays into an array of value/index pairs. Then, group them by indices and extract only the values:

const { pipe, zip, groupBy, last, map, head } = R

const customFunction = pipe(
  zip, // combine the arrays into an array of value/index pairs
  groupBy(last), // group by the indices
  map(map(head)) // retrieve only the values from the pairs
)

const items = ["A", "B", "C", "D", "E"]
const indexes = [0, 0, 1, 0, 3]

const output = customFunction(items, indexes)

console.log(output)
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.28.0/ramda.min.js" integrity="sha512-t0vPcE8ynwIFovsylwUuLPIbdhDj6fav2prN9fEu/VYBupsmrmk9x43Hvnt+Mgn2h5YPSJOk7PMo9zIeGedD1A==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>

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

Tips for making a dynamic active button using javascript

I'm trying to create a toggle button with eight buttons. When seven out of the toggle buttons are clicked, it should toggle between two classes and change its CSS styles. If the daily button is clicked, it should toggle the styles of the other seven b ...

Is there a way to change the format of the date "Wed Jan 01 2020 00:00:00 GMT+0530 (India Standard Time)" to JAN 01, 2020 in JavaScript?

I am currently retrieving the date from the database in the format of Wed Jan 01 2020 00:00:00 GMT+0530 (India Standard Time), but I would like it to be displayed in the JAN O1,2020 format without using moment.js. Is there any alternative approach to ach ...

Setting the value of a CSS property to .value

Currently, I am engrossed in a small project. Here's the gist: I aim to read text field values and assign them to corresponding CSS rules. For example, document.getElementById("BD").value; The value being read should be assigned to border-radi ...

What is the best way to hide the vertical scrollbar on a kendo grid?

Currently, I'm analyzing a js file in an attempt to determine how to hide or remove the vertical scroll bar. Unfortunately, I do not have access to the html/css document, but I discovered that I could potentially add CSS styles. However, my dilemma li ...

differences in opinion between JavaScript code and browser add-ons/extensions

As the owner and developer of an e-commerce website, I find that potential customers often contact us regarding ordering issues. Upon investigation, we consistently discover that the problem is caused by JavaScript errors. We frequently check their browse ...

What could be causing the issue of $.ajax being undefined while utilizing jQuery in Node.js?

I'm currently testing a module on Node.js that is meant for client-side use. In order to make $.ajax work, I need some guidance. To begin with, I have installed jQuery on the project using: $ npm install jQuery Despite this, when I try to access $. ...

Transforming a series of numbers separated by commas into numerical values

I need to process a list of comma-separated numbers using the math.js library in Node.js. Even though I successfully split the numbers into an array, the math.add() function requires individual integers instead of an array. I want to find a way to provid ...

Display only the corresponding string in an array while utilizing the `useMemo` hook in React

My autocomplete input field is causing issues when trying to hide the initial output in my array. Instead of displaying all items upon mounting, I only want to show the matching string. However, if I leave my state empty like this const [filteredRecipes, s ...

The set operator in Firestore does not append any new documents to the collection

I recently implemented a promise chain to store user data in Firestore and handle authentication, but I encountered an issue. Initially, I used the add operator to save the data, but later decided to assign users based on their unique UID. After making thi ...

Queries with MongoDB RegEx fail to return any matches if the search string contains parentheses

When trying to implement case-insensitivity using regex, it seems to work well for plain strings. However, if special characters like parenthesis are involved in the search query for the name, the database returns no results. For example, a search for "Pu ...

Iterate over the array elements in React by using Hooks on click

I am facing an issue with loading objects separately from a JSON file when a button is clicked. The problem occurs when the index goes out of bounds, resulting in a TypeError "Cannot read property 'content' of undefined" message. I have tried u ...

Refresh information by clicking on the data input

Essentially, I have a jsp file with a form and a hidden div structured like this: <div style="visibility:hidden;" id="popup"> //several input </div> <form> //several input </form> Both the div and form tags contain the sa ...

What is the purpose of using the http module to specify the port when the app.listen function already sets the

var express = require("express"); var app = express(); // This code sets the port to 8080 by default, or else it will use the environment-specific port. app.set('port', process.env.PORT || 8080); app.get('/', function(req, res){ r ...

What is the best approach to handle Flow types for component props and getDerivedStateFromProps when the props are not the same

Having a Component with its props, an additional prop is added for getDerivedStateFromProps. The issue arises when setting the props with the additional one, throwing an error that the prop is not being used. Conversely, setting it without the extra prop c ...

Exploring prototypal inheritance through Angularjs module.service设计(Note: This

Having worked with Angularjs for a few months now, I am curious about implementing efficient OOP within this framework. Currently, I am involved in a project where I need to create instances of a "terminal" class that includes constructor properties and v ...

Tips for limiting the frequency of Angular provider loading instances

I have created a provider (I tried with a controller as well, but got the same results). Here is my code: .provider('socketio', function() { this.socket = io.connect("//localhost); console.log("LISTENING..."); this.$get = function() ...

Exploring depths of data with AngularJS: multiple levels of drilling

I am new to AngularJs and facing a challenge with a complex JSON structure that I need to use for an auto complete feature. I want to create an auto complete for only the child elements within the structure, without displaying the parent categories. Acce ...

"Modifying a variable within an object while iterating through a loop

I am attempting to update a variable within an object while looping through the elements. Specifically, I am targeting all parent elements with the class "parent" to use with the ScrollMagic plugin. Here is my code: var childElement = $('.child' ...

Leverage Angular to highlight updated items within a list

My goal is to synchronize data, so I have a data object that holds the current state. Whenever this state changes, I want to mark the object with an attribute for filtering purposes during syncing. Here is the structure of the object: data = { type1: [ ...

Embracing the A attribute within HTML input elements

I am having an issue with my search bar setup using AJAX to display results. The input box covers the first result, making it unclickable (visible but not interactive). I have tried numerous solutions without success, as only the first result is affected w ...