হ্যাঁ, অ্যারে.ম্যাপ () বা $। ম্যাপ () একই কাজ করে।
//array.map:
var ids = this.fruits.map(function(v){
return v.Id;
});
//jQuery.map:
var ids2 = $.map(this.fruits, function (v){
return v.Id;
});
console.log(ids, ids2);
http://jsfiddle.net/NsCXJ/1/
যেহেতু অ্যারে.ম্যাপটি পুরানো ব্রাউজারগুলিতে সমর্থিত নয়, তাই আমি আপনাকে পরামর্শ দিচ্ছি যে আপনি jQuery পদ্ধতিতে আটকে থাকুন।
যদি আপনি কোনও কারণে অন্যটিকে পছন্দ করেন তবে আপনি সর্বদা পুরানো ব্রাউজার সমর্থনের জন্য একটি পলিফিল যোগ করতে পারেন।
আপনি অ্যারে প্রোটোটাইপে সর্বদা কাস্টম পদ্ধতিগুলি যুক্ত করতে পারেন:
Array.prototype.select = function(expr){
var arr = this;
//do custom stuff
return arr.map(expr); //or $.map(expr);
};
var ids = this.fruits.select(function(v){
return v.Id;
});
আপনি একটি স্ট্রিং পাস করলে ফাংশন কনস্ট্রাক্টর ব্যবহার করে এমন একটি বর্ধিত সংস্করণ। এর সাথে চারপাশে খেলার কিছু সম্ভবত:
Array.prototype.select = function(expr){
var arr = this;
switch(typeof expr){
case 'function':
return $.map(arr, expr);
break;
case 'string':
try{
var func = new Function(expr.split('.')[0],
'return ' + expr + ';');
return $.map(arr, func);
}catch(e){
return null;
}
break;
default:
throw new ReferenceError('expr not defined or not supported');
break;
}
};
console.log(fruits.select('x.Id'));
http://jsfiddle.net/aL85j/
হালনাগাদ:
যেহেতু এটি একটি জনপ্রিয় উত্তর হয়ে গেছে, আমি আমার where()
+ অনুরূপ যুক্ত করছি firstOrDefault()
। এগুলি স্ট্রিং ভিত্তিক ফাংশন কনস্ট্রাক্টর পদ্ধতির সাথেও ব্যবহার করা যেতে পারে (যা সবচেয়ে দ্রুত) তবে এখানে ফিল্টার হিসাবে আক্ষরিক অর্থে অবজেক্ট ব্যবহার করার জন্য আরও একটি পদ্ধতি রয়েছে:
Array.prototype.where = function (filter) {
var collection = this;
switch(typeof filter) {
case 'function':
return $.grep(collection, filter);
case 'object':
for(var property in filter) {
if(!filter.hasOwnProperty(property))
continue; // ignore inherited properties
collection = $.grep(collection, function (item) {
return item[property] === filter[property];
});
}
return collection.slice(0); // copy the array
// (in case of empty object filter)
default:
throw new TypeError('func must be either a' +
'function or an object of properties and values to filter by');
}
};
Array.prototype.firstOrDefault = function(func){
return this.where(func)[0] || null;
};
ব্যবহার:
var persons = [{ name: 'foo', age: 1 }, { name: 'bar', age: 2 }];
// returns an array with one element:
var result1 = persons.where({ age: 1, name: 'foo' });
// returns the first matching item in the array, or null if no match
var result2 = persons.firstOrDefault({ age: 1, name: 'foo' });
ফাংশন কনস্ট্রাক্টর বনাম অবজেক্ট আক্ষরিক গতির তুলনা করার জন্য এখানে একটি জেএসপিফার পরীক্ষা দেওয়া হচ্ছে। আপনি যদি পূর্বটি ব্যবহার করার সিদ্ধান্ত নেন তবে স্ট্রিংগুলি সঠিকভাবে উদ্ধৃত করার বিষয়টি মনে রাখবেন।
আমার ব্যক্তিগত পছন্দটি হল 1-2 টি বৈশিষ্ট্য ফিল্টার করার সময় অবজেক্ট আক্ষরিক ভিত্তিক সমাধানগুলি ব্যবহার করা এবং আরও জটিল ফিল্টারিংয়ের জন্য একটি কলব্যাক ফাংশন পাস করা।
নেটিভ অবজেক্ট প্রোটোটাইপগুলিতে পদ্ধতি যুক্ত করার সময় আমি এটি 2 সাধারণ টিপসের সাহায্যে শেষ করব:
ওভাররাইট করার আগে বিদ্যমান পদ্ধতিগুলির উপস্থিতি পরীক্ষা করুন যেমন:
if(!Array.prototype.where) {
Array.prototype.where = ...
আপনার যদি IE8 এবং নীচে সমর্থন করার প্রয়োজন না হয় তবে অবজেক্ট.ডেফাইনপ্রোপার্টি ব্যবহারের পদ্ধতিগুলি তাদের অ-গণনাযোগ্য করে তুলুন । যদি for..in
কোনও অ্যারে ব্যবহার করা হয় (যা প্রথম স্থানে ভুল) তবে তারা অসংখ্য গুণাবলীও পুনরাবৃত্তি করবে। শুধু একটি মাথা আপ.