Are the functionalities of JavaScript and Ruby similar?
array.select {|x| x > 3}
Could it be done like this instead:
array.select(function(x) { if (x > 3) return true})
Are the functionalities of JavaScript and Ruby similar?
array.select {|x| x > 3}
Could it be done like this instead:
array.select(function(x) { if (x > 3) return true})
One way to filter arrays in JavaScript is by using Array.filter()
:
var numbers = [1, 2, 3, 4, 5];
var filtered = numbers.filter(function(x) { return x > 3; });
// Another example using JavaScript 1.8 expression closure
filtered = numbers.filter(function(x) x > 3);
It's important to note that according to Mozilla Developer Network, Array.filter()
is not a standard feature of ECMAScript and is not present in specifications older than ES5. This means it may not be compatible with other ECMAScript variations like JScript used in Internet Explorer.
Update as of November 2020: Array.filter is now supported in all major browsers. You can check the compatibility on Can I Use website.
Another method available in ES6 is Array.find()
, which will return the first element in an array that matches a specified condition.
Visit this link for more information on Array.find
const myArray = [1, 2, 3]
const myElement = myArray.find((element) => element === 2)
console.log(myElement)
// => 2
Underscore.js is a valuable tool for performing various operations - leveraging built-in functions like Array.filter when available, or its own implementations otherwise.
Explore Underscore.js
The documentation provides insight into usage - while the javascript lambda syntax may not be as concise as Ruby or other languages (often requiring an explicit return statement), understanding scope is crucial to avoid common pitfalls. Despite limitations like lazy list comprehensions, Underscore.js simplifies many tasks efficiently.
In the context of .select() (also aliased as .filter()):
This method iterates through each value in the list, building an array of elements that satisfy a specified truth test (iterator). It defers to the native filter function if available.
var evens = _.select([1, 2, 3, 4, 5, 6], function(num){ return num % 2 == 0; });
=> [2, 4, 6]
Extend your JavaScript functionality by implementing a custom select method like the one below:
Array.prototype.select = function(callback){
for(var i = 0; i < this.length; i++) {
if(callback(this[i])){
return this[i];
}
}
return null;
};
This is how you can now utilize the select method:
var numbers = [1,2,3,4];
var selectedNumber = numbers.select(function(val) {
return val == 2;
});
console.log(selectedNumber);
You can also use it with objects within an array:
var data = [{id: 1, available: true},
{id: 2, available: true},
{id: 3, available: true},
{id: 4, available: true}];
var selectedObject = data.select(function(obj) {
return obj.id === 2;
});
console.log(selectedObject);
It's important to note that Array.filter may not be supported in all browsers, so it’s a good idea to create your own implementation if necessary.
You can find the source code for Array.prototype on MDN.
if (!Array.prototype.filter)
{
Array.prototype.filter = function(fun /*, thisp */) {
"use strict";
if (this == null)
throw new TypeError();
var t = Object(this);
var len = t.length >>> 0;
if (typeof fun != "function")
throw new TypeError();
var res = [];
var thisp = arguments[1];
for (var i = 0; i < len; i++) {
if (i in t) {
var val = t[i]; // in case fun mutates this
if (fun.call(thisp, val, i, t))
res.push(val);
}
}
return res;
};
}
For more information, visit https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter.
There are situations where the map
function can be utilized, as demonstrated in the following examples:
var temperatures = [22, 50, 310, 0, 80];
var convertedTemperatures = temperatures.map(function(temp) { return temp - 273; });
console.log(convertedTemperatures); //[-251, -223, 37, -273, -193]
Alternatively,
var people = [ {name: 'Mary', gender: 0, age: 28 }, {name: 'Sara', gender: 0, age: 17 }, {name: 'Tom', gender: 1, age: 20 }];
var titles = people.map(function(person) { return (person.gender == 0? 'Mrs.' : 'Mr.') + person.name; });
console.log(titles); //["Mrs.Mary", "Mrs.Sara", "Mr.Tom"]
var ageVerification = people.map(function(person) { return person.age >= 18; });
console.log(ageVerification); //[true, false, true]
Is it possible to add variation to my button based on the prop 'size' being set to either 'small' or 'medium'? interface Props { size?: 'medium' | 'small'; } How can I adjust the size of the component us ...
Hey everyone, I'm relatively new to node.js but have made some progress. Following the steps in this tutorial, I was able to create my first "example" server. However, there are a few things that I don't quite understand. Could someone please exp ...
Looking for a more efficient way to return a dictionary in JavaScript that includes data from both a Category table and Sub_category table. The desired format is 'Category1': 'Sub_cat1, Sub_cat2, ...'. Any ideas on a better approach? T ...
I am looking to create a system that restricts visitors to view only one webpage at a time, allowing only one browser window or tab to be open. To achieve this, I have utilized a session variable named "is_viewing". When set to true, access to additional ...
Is there a way to automatically refresh the source link every 5 seconds in order to display an image from another page on index.php? On index.php <img id="img1" class="imgNews" src="https://example.com/car.jpg"> On other.php <span id="link1"&g ...
When testing an angular controller that utilizes an external library like Google Analytics event tracking, how can you approach it? For instance: $scope.showVolumn = function() { ga('send', { 'hitType': 'event', ...
I currently have a list that is separated into three columns, structured as follows: Column1 Column2 Column3 1 4 7 2 5 8 3 6 9 The list ranges from 1 to 9 and each column consists of a fixed number of rows (3). I am lo ...
Consider: [uniqueName] => Array ( [1] => uniqueName#1 [2] => uniqueName#2 [3] => uniqueName#3 [4] => uniqueName#4 [5] => [6] => ...
Welcome to my users.js page! import React from 'react' const displayUsers = ({users}) => { return ( <> { users.map(user => { return <div key={user.id}> {user.name} </div> }) } </&g ...
I am currently working on a project where I need to retrieve the csrf token from a web page built with Django using javascript. The structure of my HTML template is as follows: <div class = "debugging"> <p id = "csrf">{% csrf_token %}</p ...
When coding in Javascript, a challenge I am facing is creating a variable that includes the @ symbol in a string without it being misinterpreted as something else, especially when dealing with URLs. Does anyone have any suggestions on how to handle this ...
I am currently working on setting up basic routing in Vue. I have identified three file listings that seem to be causing issues. When I include <router-view> in app.vue, the foo component appears in the browser. However, when I follow the instruction ...
I am utilizing Vue3 and Pinia for state management. Here is an excerpt from my Pinia file: export const useCounterStore = defineStore ({ id: 'statusData', state: () => ({ test1: 25, test2: 75 }) }) As for the template I am us ...
I'm looking to include links on my website that will activate a javascript function when clicked, and I do not want these links to be underlined. Additionally, I want the cursor to change to a standard pointer. What is the most effective way to achiev ...
I am facing a challenge with my HTML popup window where I need to add text after opening the window using a specific function: var win = window.open('private.php', data.sender_id , 'width=300,height=400'); win.win ...
I am currently working on a personal project to add to my portfolio. The project involves creating a registration site where users can input their personal data, shipping information, and then review everything before submission. To streamline the process ...
I've written the code below, but I'm having trouble figuring out if it's accurate. Specifically, I can't seem to access the text inputs that have been created by their respective id attributes. for (i=0;i<t;i++) { div.innerHTML=div. ...
Is there a way to make the ng-view wait for an xhr request? I have two controllers set up for a routed ng-view - the first one loads perfectly, but the second one doesn't render properly because the xhr response is happening after partial.html has bee ...
I'm looking to create a customized sticky navigation bar through Javascript, but I have never written my own code in this language before. My approach involves implementing two sticky navigation bars that appear and disappear based on scrolling behav ...
I recently developed a jQuery plugin. var timer = $.timer(function() { refreshDashboard(); }); timer.set({ time : 10000, autostart : true }); The plugin triggers the refreshDashboard(); function every 10 seconds. Now, I need to halt the timer for ...