উত্তর:
find()
পদ্ধতিটি ব্যবহার করুন :
myArray.find(x => x.id === '45').foo;
এমডিএন থেকে :
find()
পদ্ধতি, অ্যারের মধ্যে প্রথম মান ফেরৎ যদি অ্যারের সন্তুষ্ট মধ্যে একটি উপাদান প্রদান করা পরীক্ষা ফাংশন। অন্যথায়undefined
ফেরত দেওয়া হয়।
পরিবর্তে আপনি যদি এর সূচকটি খুঁজতে চান তবে ব্যবহার করুন findIndex()
:
myArray.findIndex(x => x.id === '45');
এমডিএন থেকে :
findIndex()
পদ্ধতি অ্যারের মধ্যে প্রথম উপাদান সূচক ফেরৎ মাফিক টেস্টিং ফাংশন প্রদান করা হয়েছে। অন্যথায় -1 ফেরত দেওয়া হয়।
আপনি যদি মিলের উপাদানগুলির একটি অ্যারে পেতে চান তবে filter()
পরিবর্তে পদ্ধতিটি ব্যবহার করুন:
myArray.filter(x => x.id === '45');
এটি বস্তুর একটি অ্যারের ফিরিয়ে দেবে। আপনি যদি কোনও foo
বৈশিষ্ট্যের অ্যারে পেতে চান তবে আপনি map()
পদ্ধতিটি দিয়ে এটি করতে পারেন :
myArray.filter(x => x.id === '45').map(x => x.foo);
সাইড নোট: মত পদ্ধতি find()
বা filter()
, এবং তীর ফাংশন পুরোনো ব্রাউজারে (আইই মত) দ্বারা সমর্থিত নয়, তাই আপনি যদি এই ব্রাউজারগুলির সমর্থন করতে চান, আপনি আপনার কোড ব্যবহার transpile উচিত হট্টগোল (সঙ্গে polyfill )।
আপনি যেমন ইতিমধ্যে jQuery ব্যবহার করছেন, আপনি গ্রেপ ফাংশনটি ব্যবহার করতে পারেন যা কোনও অ্যারে অনুসন্ধানের উদ্দেশ্যে করা হয়েছে:
var result = $.grep(myArray, function(e){ return e.id == id; });
ফলাফলটি পাওয়া আইটেমগুলির সাথে একটি অ্যারে। যদি আপনি জানেন যে অবজেক্টটি সর্বদা থাকে এবং এটি কেবল একবার ঘটে তবে আপনি result[0].foo
মানটি পেতে কেবল ব্যবহার করতে পারেন। অন্যথায় আপনার ফলাফলের অ্যারের দৈর্ঘ্য পরীক্ষা করা উচিত। উদাহরণ:
if (result.length === 0) {
// no result found
} else if (result.length === 1) {
// property found, access the foo property using result[0].foo
} else {
// multiple items found
}
===
পরিবর্তে ব্যবহার করা আরও নিরাপদ । ==
==
e.id
এবং id
স্ট্রিং হতে হবে, আমি এটা ব্যবহার করা ঠিক ঠাউর ==
। কিন্তু আপনি যদি নিশ্চিত না হন, আপনি সমস্যার সম্মুখীন হতে পারে (যেহেতু '' == 0
হয় true
কিন্তু '' === 0
হল false
)। উল্লেখ না ===
করা দ্রুত বলে মনে হচ্ছে ( স্ট্যাকওভারফ্লো . com / প্রশ্নস / 359494/… )।
===
কারণ এটি অন্যান্য প্রোগ্রামিং ভাষার মতো ঠিক কাজ ==
করে। আমি ==
জাভাস্ক্রিপ্টে অস্তিত্বহীন বলে বিবেচনা করি ।
আর একটি সমাধান হ'ল লুচিং অবজেক্ট তৈরি করা:
var lookup = {};
for (var i = 0, len = array.length; i < len; i++) {
lookup[array[i].id] = array[i];
}
... now you can use lookup[id]...
এটি বিশেষভাবে আকর্ষণীয় যদি আপনার অনেকগুলি অনুসন্ধানের প্রয়োজন হয়।
আইডি এবং অবজেক্টগুলি ভাগ করা হওয়ায় এর বেশি মেমরির প্রয়োজন হবে না।
lookup
বস্তু তৈরি করা সময়ের অপচয়।
এর নাম ECMAScript 2015 প্রদান করে খোঁজ () অ্যারে তে পদ্ধতি:
var myArray = [
{id:1, name:"bob"},
{id:2, name:"dan"},
{id:3, name:"barb"},
]
// grab the Array item which matchs the id "2"
var item = myArray.find(item => item.id === 2);
// print
console.log(item.name);
এটি বাহ্যিক গ্রন্থাগার ছাড়া কাজ করে। তবে আপনি যদি পুরানো ব্রাউজার সমর্থন চান তবে আপনি এই পলিফিলটি অন্তর্ভুক্ত করতে চাইতে পারেন ।
myArray.find(d=>d.id===45).foo;
।
myArray.find(({ id }) => id === 45).foo
। তবে এটি একটি পুরানো উত্তর যা ES2015 সিনট্যাক্সের আগে লেখা হয়েছিল যেমনটি এখনকার মতো সমর্থনযোগ্য ছিল। @ গথডোর উত্তর বর্তমানে থ্রেডে সবচেয়ে বেশি আপ টু ডেট।
myArray.find(d => d.id === 45)?.foo
।
অ্যান্ডসোর.জেএস এর জন্য একটি দুর্দান্ত পদ্ধতি রয়েছে:
myArray = [{'id':'73','foo':'bar'},{'id':'45','foo':'bar'},etc.]
obj = _.find(myArray, function(obj) { return obj.id == '45' })
আমি মনে করি সবচেয়ে সহজ উপায়টি নিম্নলিখিত হবে, তবে এটি ইন্টারনেট এক্সপ্লোরার 8 এ (বা তার আগের) কাজ করবে না:
var result = myArray.filter(function(v) {
return v.id === '45'; // Filter out the appropriate one
})[0].foo; // Get result and access the foo property
for
কি?
for
লুপের তুলনায় সত্যই দ্রুত হবে না ।
for
লুপটি প্রথম ম্যাচে শেষ হবে।
id
নিম্নলিখিত চেষ্টা করুন
function findById(source, id) {
for (var i = 0; i < source.length; i++) {
if (source[i].id === id) {
return source[i];
}
}
throw "Couldn't find object with id: " + id;
}
myArray.filter(function(a){ return a.id == some_id_you_want })[0]
উপরে FindById ফাংশনের একটি জেনেরিক এবং আরও নমনীয় সংস্করণ:
// array = [{key:value},{key:value}]
function objectFindByKey(array, key, value) {
for (var i = 0; i < array.length; i++) {
if (array[i][key] === value) {
return array[i];
}
}
return null;
}
var array = [{'id':'73','foo':'bar'},{'id':'45','foo':'bar'}];
var result_obj = objectFindByKey(array, 'id', '45');
আপনি মানচিত্র () ফাংশনটি ব্যবহার করে এটি সহজেই পেতে পারেন :
myArray = [{'id':'73','foo':'bar'},{'id':'45','foo':'bar'}];
var found = $.map(myArray, function(val) {
return val.id == 45 ? val.foo : null;
});
//found[0] == "bar";
কার্যকারী উদাহরণ: http://jsfiddle.net/hunter/Pxaua/
map
স্বয়ংক্রিয়ভাবে null
উপাদানগুলি সরায় । এটি আমার কাছে এবং সাধারণ ধারণার জন্য বিভ্রান্তিকর বলে মনে map
হচ্ছে কারণ ফলাফলটি মূল সংগ্রহের একই দৈর্ঘ্যের নয়।
আপনি ফিল্টার ব্যবহার করতে পারেন,
function getById(id, myArray) {
return myArray.filter(function(obj) {
if(obj.id == id) {
return obj
}
})[0]
}
get_my_obj = getById(73, myArray);
এখানে অনেকগুলি সঠিক উত্তর পাওয়া গেলেও, তাদের মধ্যে অনেকেই একবারে একাধিকবার করা হলে এটি অহেতুক ব্যয়বহুল অপারেশন বলে সত্যতা দেখায় না। চরম ক্ষেত্রে এটি বাস্তব পারফরম্যান্স সমস্যার কারণ হতে পারে।
বাস্তব বিশ্বে আপনি যদি প্রচুর আইটেম এবং কর্মক্ষমতা প্রক্রিয়াকরণ করছেন তবে এটি উদ্বেগের বিষয় হিসাবে প্রাথমিকভাবে লুকআপ তৈরি করা আরও দ্রুত:
var items = [{'id':'73','foo':'bar'},{'id':'45','foo':'bar'}];
var lookup = items.reduce((o,i)=>o[i.id]=o,{});
তারপরে আপনি নির্দিষ্ট সময় মতো আইটেমগুলিতে পেতে পারেন:
var bar = o[id];
আপনি অবজেক্টের পরিবর্তে মানচিত্রটিকে চেহারা হিসাবে বিবেচনা করতে পারেন: https://developer.mozilla.org/en/docs/Web/JavaScript/ উল্লেখ / গ্লোবাল_অবজেক্টস / মানচিত্র
Array.reduce
var array = [ {'id':'73' ,'foo':'bar'} , {'id':'45' ,'foo':'bar'} , ];
var id = 73;
var found = array.reduce(function(a, b){
return (a.id==id && a) || (b.id == id && b)
});
অন্যথায় যদি পাওয়া যায় তবে অবজেক্ট উপাদানটি প্রদান করে false
আপনি যদি একাধিক বার এটি করেন তবে আপনি একটি মানচিত্র সেট করতে পারেন (ES6):
const map = new Map( myArray.map(el => [el.id, el]) );
তারপরে আপনি সহজভাবে এটি করতে পারেন:
map.get(27).foo
খাঁটি জাভাস্ক্রিপ্টে আমি এটি সম্পর্কে কীভাবে যাব তা এখানে, সবচেয়ে ন্যূনতম পদ্ধতিতে আমি এটি ECMAScript 3 বা তার পরেও কাজ করতে পারি তা ভাবতে পারি। ম্যাচ পাওয়া মাত্রই এটি ফিরে আসে।
var getKeyValueById = function(array, key, id) {
var testArray = array.slice(), test;
while(test = testArray.pop()) {
if (test.id === id) {
return test[key];
}
}
// return undefined if no matching id is found in array
return;
}
var myArray = [{'id':'73', 'foo':'bar'}, {'id':'45', 'foo':'bar'}]
var result = getKeyValueById(myArray, 'foo', '45');
// result is 'bar', obtained from object with id of '45'
আরও জেনেরিক এবং সংক্ষিপ্ত
function findFromArray(array,key,value) {
return array.filter(function (element) {
return element[key] == value;
}).shift();
}
আপনার ক্ষেত্রে প্রাক্তন var element = findFromArray(myArray,'id',45)
এটি আপনাকে পুরো উপাদানটি দেবে।
আপনি http://sugarjs.com/ থেকে চিনিজ চেষ্টা করে দেখতে পারেন ।
অ্যারেতে এটির খুব মিষ্টি পদ্ধতি রয়েছে .find
। সুতরাং আপনি এই জাতীয় উপাদান খুঁজে পেতে পারেন:
array.find( {id: 75} );
আপনি আরও একটি বৈশিষ্ট্য যুক্ত কোনও বস্তুটিকে অন্য "হু-ক্লজ" যুক্ত করতে পাস করতে পারেন।
দ্রষ্টব্য যে সুগারজগুলি দেশীয় বস্তুগুলিকে প্রসারিত করে এবং কিছু লোক এটিকে খুব খারাপ বলে মনে করে ...
find
। আমার পরামর্শ হ'ল আপনি যদি দেশীয় প্রোটোটাইপগুলি প্রসারিত করতে চান তবে সর্বদা আরও সুনির্দিষ্ট নামগুলি ব্যবহার করুন, সবচেয়ে সহজ নামগুলি ভবিষ্যতের মানক বিকাশের দিকে রেখে।
গৃহীত উত্তরে বিল্ডিং:
JQuery:
var foo = $.grep(myArray, function(e){ return e.id === foo_id})
myArray.pop(foo)
বা কফিস্ক্রিপ্ট:
foo = $.grep myArray, (e) -> e.id == foo_id
myArray.pop foo
সম্প্রতি, আমাকে একই জিনিসটির মুখোমুখি হতে হয়েছে যার মধ্যে আমাকে বিশাল অ্যারে থেকে স্ট্রিংটি অনুসন্ধান করতে হবে।
কিছু অনুসন্ধানের পরে আমি দেখতে পেলাম যে সহজ কোড সহ হ্যান্ডেল করা সহজ হবে:
কোড:
var items = mydata.filter(function(item){
return item.word.toLowerCase().startsWith( 'gk );
})
অ্যারেতে কোনও আইটেম নিয়ে আইট্রেট করুন। আপনি যে প্রতিটি আইটেমে যান তার জন্য, আইটেমটির আইডি চেক করুন। যদি এটি একটি মিল হয়, এটি ফেরত দিন।
যদি আপনি কেবল তেহ কোডড চান:
function getId(array, id) {
for (var i = 0, len = array.length; i < len; i++) {
if (array[i].id === id) {
return array[i];
}
}
return null; // Nothing found
}
এবং একই জিনিস ECMAScript 5 এর অ্যারে পদ্ধতিগুলি ব্যবহার করে:
function getId(array, id) {
var obj = array.filter(function (val) {
return val.id === id;
});
// Filter returns an array, and we just want the matching item.
return obj[0];
}
যতক্ষণ না ব্রাউজার ECMA-262 , 5 তম সংস্করণ (ডিসেম্বর 2009) সমর্থন করে, এটি প্রায় এক-লাইনার কাজ করা উচিত:
var bFound = myArray.some(function (obj) {
return obj.id === 45;
});
bFound
কেবল একটি বুলিয়ান true
।
অ্যারেগুলির জন্য অন্তর্নির্মিত "ফিল্টার" ফাংশনটি ব্যবহার করে আপনি খাঁটি জাভাস্ক্রিপ্টে এটি করতে পারেন:
Array.prototype.filterObjects = function(key, value) {
return this.filter(function(x) { return x[key] === value; })
}
সুতরাং এখন কেবল "আইডি" এর স্থলে key
এবং "45" এর জায়গায় পাস করুন value
এবং আপনি 45 এর আইডির সাথে মিলিত পুরো অবজেক্টটি পাবেন So সুতরাং এটি হবে,
myArr.filterObjects("id", "45");
Array.prototype.filter()
ফাংশন ব্যবহার করুন ।
ডেমো : https://jsfiddle.net/sumitridhal/r0cz0w5o/4/
তাদেরকে JSON
var jsonObj =[
{
"name": "Me",
"info": {
"age": "15",
"favColor": "Green",
"pets": true
}
},
{
"name": "Alex",
"info": {
"age": "16",
"favColor": "orange",
"pets": false
}
},
{
"name": "Kyle",
"info": {
"age": "15",
"favColor": "Blue",
"pets": false
}
}
];
ছাঁকনি
var getPerson = function(name){
return jsonObj.filter(function(obj) {
return obj.name === name;
});
}
.filter
পদ্ধতিটি ব্যবহার করুন obj.info
। var getPerson = function(name){ return jsonObj.filter(function(obj) { return obj.info.filter(function(info) { return pets === false; }); }); }
আমরা Jquery পদ্ধতি ব্যবহার করতে পারেন $.each()/$.grep()
var data= [];
$.each(array,function(i){if(n !== 5 && i > 4){data.push(item)}}
অথবা
var data = $.grep(array, function( n, i ) {
return ( n !== 5 && i > 4 );
});
ES6 সিনট্যাক্স ব্যবহার করুন:
Array.find, Array.filter, Array.forEach, Array.map
বা ব্যবহার Lodash https://lodash.com/docs/4.17.10#filter , আন্ডারস্কোর https://underscorejs.org/#filter
আমি হারুন ডিগুল্লার দেওয়া উত্তরটি সত্যিই পছন্দ করেছি কিন্তু আমার অবজেক্টগুলির অ্যারে রাখার প্রয়োজন ছিল যাতে আমি পরে এটির মাধ্যমে পুনরুক্তি করতে পারি। সুতরাং আমি এটিতে পরিবর্তন করেছি
var indexer = {};
for (var i = 0; i < array.length; i++) {
indexer[array[i].id] = parseInt(i);
}
//Then you can access object properties in your array using
array[indexer[id]].property
ব্যবহার করুন:
var retObj ={};
$.each(ArrayOfObjects, function (index, obj) {
if (obj.id === '5') { // id.toString() if it is int
retObj = obj;
return false;
}
});
return retObj;
এটি আইডি দ্বারা একটি বস্তু ফেরত দেওয়া উচিত।
এই সমাধানটি পাশাপাশি সহায়ক হতে পারে:
Array.prototype.grep = function (key, value) {
var that = this, ret = [];
this.forEach(function (elem, index) {
if (elem[key] === value) {
ret.push(that[index]);
}
});
return ret.length < 2 ? ret[0] : ret;
};
var bar = myArray.grep("id","45");
আমি এটি ঠিক এর মতো করে দিয়েছি $.grep
এবং যদি কোনও বস্তুর সন্ধান হয় তবে ফাংশনটি অ্যারের পরিবর্তে অবজেক্টটি ফিরিয়ে দেবে।
function will return the object, rather than an array
ভুল হতে পারে তবে আমি মনে করি এটি ব্যবহারকারীদের উপর নির্ভর করে।
আগ্রাটনের উত্তর থেকে শুরু করে , এটি এমন একটি ফাংশন যা আসলে ওয়ান্ট উপাদানটি (বা null
না পাওয়া গেলে) প্রদান করে array
এবং এমন একটি callback
ফাংশন দেয় যা "সঠিক" উপাদানটির সত্যবাদী মান দেয়:
function findElement(array, callback) {
var elem;
return array.some(function(e) {
if (callback(e)) {
elem = e;
return true;
}
}) ? elem : null;
});
কেবল মনে রাখবেন যে এটি IE8- এ স্থানীয়ভাবে কাজ করে না, কারণ এটি সমর্থন করে না some
। একটি পলিফিল সরবরাহ করা যেতে পারে, বিকল্পভাবে সবসময় ক্লাসিক for
লুপ থাকে:
function findElement(array, callback) {
for (var i = 0; i < array.length; i++)
if (callback(array[i])) return array[i];
return null;
});
এটি আসলে দ্রুত এবং আরও কমপ্যাক্ট। তবে আপনি যদি চাকাটি পুনরায় উদ্ভাবন করতে না চান তবে আমি প্রস্তাব করছি একটি ইউটিলিটি লাইব্রেরি যেমন আন্ডারস্কোর বা লোডাশ ব্যবহার করুন।
সংক্ষিপ্ততম,
var theAnswerObj = _.findWhere(array, {id : 42});
Ax: ক্ষেত্র_প্রকার => 2,: ক্ষেত্র => [1,3,4]} হিসাবে অবজেক্টের ফর্ম্যাট সহ অবজেক্টের অ্যারে হতে "অক্ষসংশ্লিষ্টগুলি" বিবেচনা করুন}
function getFieldOptions(axesOptions,choice){
var fields=[]
axesOptions.each(function(item){
if(item.field_type == choice)
fields= hashToArray(item.fields)
});
return fields;
}