What is preventing me from passing str.indexOf into the map function in JavaScript?

How come I'm unable to perform the following action?

let str = "A string containing * and ^ as well as $";
let indices = ["*", "^", "$"].map(str.indexOf); // not functional

I prefer not to introduce another function that duplicates the functionality of the method itself...

[...].map(function(token) { return str.indexOf(token); }); // it works

Is there an elegant solution for this issue?

Answer №1

When comparing

function(token) { return str.indexOf(token); }

to

str.indexOf

The main difference lies in the context problem that arises with the latter. In the second scenario, instead of str, it would be window. The expression str.indexOf refers to the value of the property named indexOf within the string object. While it is a function, there is no way to determine which object it is originated from based solely on this value. Therefore, passing str.indexOf simply means passing the function itself, not a reference to str.

["*", "^", "$"].map(str.indexOf);

is essentially the same as

["*", "^", "$"].map(function(token) { return window.indexOf(token); });

If an indexOf function existed in the global window scope.

To further clarify, although it's not recommended, a function can be bound to a specific object. For example, by using:

var f = str.indexOf.bind(str); // creates a copy of indexOf, bound to str
["*", "^", "$"].map(f);

the this keyword inside f will refer to str when the function is invoked.

Answer №2

As explained by @dystroy, the method you are attempting is not allowed. However, an alternative solution would be to utilize the map function with a specified context in order to achieve the desired outcome:

var text = "This is a sample text containing * and ^ symbols"
var positions = ["*", "^", "$"].map(text.indexOf, text);
//                                              ^text serves as the context
//=> positions = [23, 32, -1]

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

Navigating through Node and Express on Azure App Service

I'm facing an issue that I am not sure if it is related to Node or Azure App Service, so here's the situation: In my Node/Express app, I have defined two routes: router.get("/users", checkAuthHeader, userController.getUsers); router.po ...

I'm trying to understand a JSON object that has multiple key names pointing to a single value. How can I properly interpret this in

Encountering an object with a strange key. const obj = { formValues: { 'TOTAL;_null_;_null_;3;_null_': "100" 'billing;_null_;_null_;1;_null_': "Y" 'billing;_null_;_null_;2;_null_': "Y" 'billi ...

Tips for sending User First Name and ID through a Javascript tag on the WordPress Backend

Struggling to integrate Usetiful with my WordPress Backend. I am aiming to label the users and transmit data to Usetiful for enhanced personalization. Even though I successfully retrieved and sent the User ID to Usetiful after researching similar Q/A thr ...

Choosing Drop Down Options Dynamically with Jquery

I have a total of 4 Drop Downs on my page. https://i.stack.imgur.com/6tHj5.png Each drop-down initially displays a "--select--" option by default. Additionally, each drop-down has a unique ID assigned to it. The second drop-down is disabled when the abov ...

Reduce the density of x-axis labels in highcharts

Do you have any input on Highcharts? This chart belongs to me: https://i.sstatic.net/OAjJJ.png I am looking to reduce the density of x-axis labels, similar to the y-axis. Your assistance is greatly appreciated. Edit: for instance, take a look at this ...

Encountering the below error message when running the command to initialize expo project:

Dependency installation in progress... Warning: <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="accfc3dec981c6dfec9d829e829b">[email protected]</a> is deprecated, consider upgrading to core-js@3 or a ne ...

Tips for Preventing Repetition of Locations on a Website for Reviewing Places

I am currently working on creating a directory specifically for hospitals, similar to the "Yellow Pages." Can anyone advise on how to avoid duplication of pages for the same hospital? I was considering using longitude and latitude registration, but it se ...

Look through the contents of each child within a div to locate specific text, then conceal any that do not include it

I want to dynamically hide divs that do not contain the text I specify. Here is the code I have tried: var $searchBox = $('#search-weeazer'); $searchBox.on('input', function() { var scope = this; var $userDivs = $('.infor ...

Display text on the screen with a customized design using JavaScript's CSS styles

I need help with printing a specific page that contains some information designed in print.css. I want to print this page, including an image, with the same style. function printContent() { var divContents = document.getElementById("terms").innerH ...

What is the best approach for managing multiple HTTP requests in my specific situation?

I have a query about handling multiple HTTP requests in my code to ultimately get the desired result. Here is an outline of my approach: var customer[]; var url = '/api/project/getCustomer'; getProject(url) .then(function(data){ ...

Creating a stylish background gradient between two handles on a jQuery Slider with CSS

After watching a presentation by Lea Verou on CSS Variables titled CSS Variables: var(--subtitle);, I was inspired to create a gradient effect between jQuery Slider handles: $(function() { var max = 400; var $slider = $('.slider'); funct ...

Encountering an issue when implementing a conditional check within the .map() function utilizing ES6 syntax

I'm struggling to assign only the object that contains an iban value to the list in the code snippet below. I haven't been able to fix this issue on my own and would appreciate some assistance. This.ibanList = this.data.map( (value, in ...

External script implementing StratifiedJSIt is possible for an external script

Recently, I stumbled upon the amazing StratifiedJS library that offers many features I find essential. It functions flawlessly when implemented directly in my HTML file, like so: <script src="libraries/stratified.js"></script> <scr ...

Overabundance of Recursive Calls in Node.js Project Dependencies

After a tiring day at work, I noticed an alert for Windows SkyDrive showing that files couldn't be uploaded due to the path being too long. The lengthy directory structure made me chuckle at the technological limitation. However, it got me thinking: ...

Utilizing columns within the 'segment' element in Semantic-ui to enhance layout design

I am looking to divide the ui-segment into 3 columns and display the ui-statistics evenly. Below is the code I have used in an attempt to achieve this: <div class="ui container"> <div class="ui segment"> <h3 class="ui header"> ...

Modify CSS image according to the user interface language in asp.net

Is there a way to dynamically change the image based on different cultures in my ASP.NET webpage? I have successfully been able to switch strings using a resource file, but I am unsure how to handle images. Currently, I have an A tag with a specific clas ...

The AngularJS array data is not displaying correctly

I am having trouble displaying comments array data in HTML properly. The data appears the same as it is in the comments array. What could be causing this issue? How should I proceed? <ul class="media-list" ng-controller="dishDetailController as menuCt ...

Flow - secure actions to ensure type safety

Currently implementing flow and looking to enhance the type safety of my reducers. I stumbled upon a helpful comment proposing a solution that seems compatible with my existing codebase: https://github.com/reduxjs/redux/issues/992#issuecomment-191152574 I ...

The state is failing to initiate a re-render despite a change in its state

In my React application, I have encountered an issue with combining two reducers. One of the reducers is functioning properly, but the other one is not triggering a re-render after a state change. Interestingly, when I save a document or make a change in t ...

During bundling, utilize an npm script to copy the package.json file to the dist directory

Currently, I am facing a challenge while trying to enhance my npm bundle script. Although the initial part is functioning smoothly, I am encountering difficulties in including three additional files along with the bundle. At present, my script looks like ...