क्या जावास्क्रिप्ट में भी वैसी ही कार्यक्षमता है जैसी रूबी के पास है?
array.select {|x| x > 3}
कुछ इस तरह:
array.select(function(x) { if (x > 3) return true})
जवाबों:
वहाँ है Array.filter():
var numbers = [1, 2, 3, 4, 5];
var filtered = numbers.filter(function(x) { return x > 3; });
// As a JavaScript 1.8 expression closure
filtered = numbers.filter(function(x) x > 3);
ध्यान दें कि Array.filter()मानक ECMAScript नहीं है , और यह ES5 से अधिक पुराने ECMAScript चश्मे में दिखाई नहीं देता है (धन्यवाद यी जियांग और jAndy)। इस प्रकार, इसे JScript (MSIE पर) जैसी अन्य ECMAScript बोलियों द्वारा समर्थित नहीं किया जा सकता है।
नवम्बर 2020 अद्यतन : Array.filter अब सभी प्रमुख ब्राउज़रों में समर्थित है।
Underscore.js इस प्रकार के संचालन के लिए एक अच्छी लाइब्रेरी है - यह बिल्ट रूटीन जैसे कि Array.filter उपलब्ध होने पर उपयोग करता है, या नहीं तो अपना खुद का उपयोग करता है।
http://documentcloud.github.com/underscore/
डॉक्स उपयोग का एक विचार देगा - जावास्क्रिप्ट लैम्ब्डा सिंटैक्स रूबी या अन्य के रूप में सुसाइड के निकट कहीं नहीं है (मैं हमेशा उदाहरण के लिए एक स्पष्ट रिटर्न स्टेटमेंट जोड़ना भूल जाता हूं) और गुंजाइश को पकड़ने का एक और आसान तरीका है, लेकिन आप कर सकते हैं अधिकांश चीजें आसानी से निर्माण के अपवाद के साथ जैसे आलसी सूची की समझ।
.Select () .filter () के लिए डॉक्स से उसी के लिए एक उपनाम है)
सूची में प्रत्येक मूल्य के माध्यम से दिखता है, एक सत्य परीक्षण (पुनरावृत्ति) पास करने वाले सभी मूल्यों की एक सरणी लौटाता है। यदि यह मौजूद है, तो देशी फ़िल्टर विधि के लिए प्रतिनिधि।
var evens = _.select([1, 2, 3, 4, 5, 6], function(num){ return num % 2 == 0; });
=> [2, 4, 6]
यो आपके जेएस को इस तरह से चुनिंदा विधि से बढ़ा सकते हैं
Array.prototype.select = function(closure){
for(var n = 0; n < this.length; n++) {
if(closure(this[n])){
return this[n];
}
}
return null;
};
अब आप इसका उपयोग कर सकते हैं:
var x = [1,2,3,4];
var a = x.select(function(v) {
return v == 2;
});
console.log(a);
या एक सरणी में वस्तुओं के लिए
var x = [{id: 1, a: true},
{id: 2, a: true},
{id: 3, a: true},
{id: 4, a: true}];
var a = x.select(function(obj) {
return obj.id = 2;
});
console.log(a);
Array.find()ईएस 6 में भी है जो पहले मिलान तत्व को पाता है।
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find
const myArray = [1, 2, 3]
const myElement = myArray.find((element) => element === 2)
console.log(myElement)
// => 2
Array.filter कई ब्राउज़रों में लागू नहीं किया गया है, यदि यह मौजूद नहीं है तो इस फ़ंक्शन को परिभाषित करना बेहतर है।
Array.prototype का स्रोत कोड 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;
};
}
देख https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter अधिक जानकारी के लिए