জাভাস্ক্রিপ্ট অ্যারে প্রদত্ত মানের সমান কোনও বৈশিষ্ট্যের সাথে একটি অবজেক্ট রয়েছে কিনা তা কীভাবে নির্ধারণ করবেন?


657

আমার মতো অ্যারে আছে

vendors = [
    {
      Name: 'Magenic',
      ID: 'ABC'
     },
    {
      Name: 'Microsoft',
      ID: 'DEF'
    } //and so on goes array... 
];

ম্যাজনিকের উপস্থিতি আছে কিনা তা দেখতে আমি এই অ্যারেটি কীভাবে চেক করব? আমি লুপ করতে চাই না, যদি না আমার দরকার হয়। আমি সম্ভাব্য কয়েক হাজার রেকর্ড নিয়ে কাজ করছি।


আপডেট

যেহেতু এটি একটি জনপ্রিয় পোস্ট, তাই আমি ভেবেছিলাম যে আমি নতুন কিছু খুঁজে পেয়েছি তা ভাগ করব। এবং এটি প্রদর্শিত হয় @ সিএএফএক্সএক্স ইতিমধ্যে এটি ভাগ করে নিয়েছে! আমার এই আরও প্রায়ই পড়া উচিত। আমি https://benfrain.com / বোঝাপড়া- native- javascript-array- methods/ জুড়ে এসেছি ।

vendors.filter(function(vendor){ return vendor.Name === "Magenic" })

এবং ECMAScript 2015 এর সাথে এটি নতুন তীর ফাংশনগুলি ব্যবহার করে আরও সহজ:

vendors.filter(vendor => vendor.Name === "Magenic")

দয়া করে আপাতদৃষ্টিতে এলোমেলো মন্তব্যটি ক্ষমা করুন, তবে আপনার প্রশ্নটি কী JSON বা কেবল জাভাস্ক্রিপ্ট অ্যারে নিয়ে উদ্বেগ প্রকাশ করেছে?
অ্যালেক্স টারপিন

4
@ সিএএফএক্সএক্সএক্স সমাধান আরও ভাল, আপনি যদি নির্বাচিত সমাধানটি আপডেট করেন তবে দুর্দান্ত লাগবে।
ইমারিন 10

1
রাজি, আগে দেখেনি!
ডেভিড লোজি

তীর ফাংশন ব্যবহার করে আপনি এটিকে আরও আরও সরল করতে পারেন। সমস্ত আধুনিক ব্রাউজারগুলি এটি সমর্থন করে এবং আরও সুন্দর দেখায়।
পাইওটর কুলা

আপনি মানচিত্রের ফাংশনটি ব্যবহার করতে পারেন, খুব দরকারী
মনির আলহুসিনি

উত্তর:


264

2018 সম্পাদনা : ব্রাউজারগুলি অ্যারে ফিল্টারিং পদ্ধতি এবং তীর ফাংশনগুলিকে ব্যাপকভাবে সমর্থন করার আগে, এই উত্তরটি ২০১১ সাল থেকে। কটাক্ষপাত আছে CAFxX এর উত্তর

লুপ ছাড়াই অ্যারেতে কিছু পরীক্ষা করার কোনও "যাদু" উপায় নেই। এমনকি আপনি যদি কিছু ফাংশন ব্যবহার করেন তবে ফাংশনটি নিজেই একটি লুপ ব্যবহার করবে। আপনি যা করতে পারেন তা হ'ল কম্পিউটারের সময়কে হ্রাস করার জন্য আপনি যা খুঁজছেন তা শিগগিরই লুপ থেকে বেরিয়ে আসা is

var found = false;
for(var i = 0; i < vendors.length; i++) {
    if (vendors[i].Name == 'Magenic') {
        found = true;
        break;
    }
}

4
সমস্যা নেই. মনে রাখবেন কীথের সমাধানও খুব কার্যকর এবং এটি আপনাকে লুপিং থেকে বাঁচায়।
অ্যালেক্স টারপিন

2
আপনার "একটি কিছু" আছে কিনা তা আপনি যদি জানতে চান তবে আপনাকে একটি পতাকা লাগবে না, আপনি অ্যারের আকারের সাথে স্ক্যান সূচকের মানটি পরীক্ষা করতে পারেন। এটি কাজ করার জন্য সূচী ভার অবশ্যই অবশ্যই বিবৃতি দেওয়ার আগে ঘোষণা করা দরকার।
অ্যালেক্স

5
এই বিকল্পগুলি এখন কাজ করছে বলে মনে হচ্ছে: vendors.forEach, vendors.filter, vendors.reduce
ডেভিড লোজ্জি

1
JSON.stringify (বিক্রেতারা) .indexOf ('Magenic') সম্পর্কে কি!! == -1
সর্বশেষ শ্বাস

1
@ লাস্টব্রেথ যে 'Magenic'বস্তুটির অন্য কোথাও থাকলে খুব সহজেই একটি মিথ্যা ইতিবাচক ফলাফল হতে পারে
অ্যালেক্স টারপিন

947

পুনরায় উদ্ভাবনের দরকার নেই চাকালুপ, অন্তত স্পষ্টভাবে না (ব্যবহার তীর ফাংশন , আধুনিক ব্রাউজারে শুধুমাত্র ):

if (vendors.filter(e => e.Name === 'Magenic').length > 0) {
  /* vendors contains the element we're looking for */
}

বা, আরও ভাল :

if (vendors.some(e => e.Name === 'Magenic')) {
  /* vendors contains the element we're looking for */
}

সম্পাদনা: লস ব্রাউজারগুলির সাথে যদি আপনার সামঞ্জস্যতা প্রয়োজন হয় তবে আপনার সেরা বেটটি হ'ল:

if (vendors.filter(function(e) { return e.Name === 'Magenic'; }).length > 0) {
  /* vendors contains the element we're looking for */
}

4
@ রকেট আপনি আমার উত্তরটি সম্পাদনা করলেন কেন? কোঁকড়া ধনুর্বন্ধনী ছাড়া সিনট্যাক্স পুরোপুরি বৈধ জাভাস্ক্রিপ্ট
সিএএফএক্সএক্স

4
"ল্যাম্বডা" সিনট্যাক্সটি ক্রোম 16 এ এখনও কাজ করে না (যা কোনও লসি ব্রাউজার নয়)।
রকেট হাজমত

27
এটি আপনার লাউসের সংজ্ঞা উপর নির্ভর করে, আমার ধারণা। সেই বাক্য গঠনটি জাভাস্ক্রিপ্ট ১.৮ এর অংশ is
সিএএফএক্সএক্স

7
আপনি এখানে প্রথম এবং দ্বিতীয় উদাহরণগুলিতে যে এক্সপ্রেশন ক্লোজারটি ব্যবহার করছেন তাতে অ-মানক রয়েছে, ব্যবহার করবেন না! মজিলা থেকে সতর্কতা (সেই লিঙ্কটি দেখুন)। তারা কেবল ফায়ারফক্সে কখনও কাজ করেছে, এবং এখন অবহেলিত রয়েছে এবং তীরের কার্যকারিতার পক্ষে সরানো হবে ।
ডপপেলগ্রিনিয়ার

2
@ Hibহিবিট কারণ someশর্ট সার্কিটের সাথে একবার যখন কোনও বস্তু name === "Magenic"পাওয়া যায়। এর সাথে filterএটি অ্যারে শেষ হওয়া পর্যন্ত প্রতিটি আইটেম পরীক্ষা করবে এবং শর্তের সাথে মিলে যায় এমন একটি নতুন অ্যারে আইটেম তৈরি করবে, তারপরেlength
আডিগা

93

কোনও লুপের প্রয়োজন নেই। মাথায় আসা তিনটি পদ্ধতি:

Array.prototype.some ()

এটি আপনার প্রশ্নের সুনির্দিষ্ট উত্তর, যেমন "কিছু আছে কিনা তা পরীক্ষা করুন", এটি একটি বুল ফলাফলকে বোঝায়। যদি কোনও 'ম্যাজনিক' অবজেক্ট থাকে তবে এটি সত্য হবে, অন্যথায় মিথ্যা:

let hasMagenicVendor = vendors.some( vendor => vendor['Name'] === 'Magenic' )

Array.prototype.filter ()

এটি কেবলমাত্র একটিতে থাকলেও সমস্ত 'ম্যাজনিক' অবজেক্টের একটি অ্যারে ফিরিয়ে দেবে (একটি এক-এলিমেন্টের অ্যারে ফিরিয়ে দেবে):

let magenicVendors = vendors.filter( vendor => vendor['Name'] === 'Magenic' )

যদি আপনি এটি কোনও বুলিয়ানকে জোর করার চেষ্টা করেন তবে এটি কার্যকর হবে না, কারণ খালি অ্যারে (কোনও 'ম্যাজনিক "অবজেক্ট) এখনও সত্য নয়। সুতরাং শুধু magenicVendors.lengthআপনার শর্তসাপেক্ষে ব্যবহার করুন।

Array.prototype.find ()

এটি প্রথম 'ম্যাজনিক' বস্তুটি ফিরিয়ে দেবে (বা undefinedযদি সেখানে কিছু না থাকে):

let magenicVendor = vendors.find( vendor => vendor['Name'] === 'Magenic' );

এটি একটি বুলিয়ান ঠিক আছে (যে কোনও বস্তু সত্য, undefinedমিথ্যা) to


দ্রষ্টব্য: আমি সম্পত্তির নামগুলি অদ্ভুতভাবে আবৃত করার কারণে আমি বিক্রেতার পরিবর্তে ["নাম"] ব্যবহার করছি N নাম।

দ্রষ্টব্য 2: নামটি পরীক্ষা করার সময় কঠোর সাম্যতার পরিবর্তে (==) আলগা সমতা (==) ব্যবহার করার কোনও কারণ নেই।


5
হুডের নীচে, এগুলি সমস্ত লুপিং point এগুলি কেবল লুপিং এবং সঞ্চালন ক্রিয়াকলাপের চেয়ে সমস্ত কম্পিউটারের ধীরে ধীরে কম।
ThePartyTurtle

পাশাপাশি সেই ভালবাসাটি এখানে ভাগ করে নিতে পারি: stackoverflow.com/questions/21748670/… তাই আমার মতো আরও লোকেরা সেই পুরানো পৃষ্ঠায় নেভিগেট না করে অনুমান করে না।
ThePartyTurtle

43

গৃহীত উত্তরটি এখনও কাজ করে তবে [Array.find][1]একই প্রভাব অর্জনের জন্য এখন আমাদের কাছে একটি ECMAScript 6 নেটিভ পদ্ধতি রয়েছে ।

এমডিএন উদ্ধৃত:

সন্ধান () পদ্ধতিটি অ্যারেতে প্রথম উপাদানটির মান প্রদান করে যা সরবরাহিত পরীক্ষামূলক ক্রিয়াকে সন্তুষ্ট করে। অন্যথায় অপরিবর্তিত ফেরত দেওয়া হয়।

var arr = []; 
var item = {
  id: '21',
  step: 'step2',
  label: 'Banana',
  price: '19$'
};

arr.push(item);
/* note : data is the actual object that matched search criteria 
  or undefined if nothing matched */
var data = arr.find( function( ele ) { 
    return ele.id === '21';
} );

if( data ) {
 console.log( 'found' );
 console.log(data); // This is entire object i.e. `item` not boolean
}

আমার jsfiddle লিঙ্কটি দেখুন মোজিলা দ্বারা সরবরাহিত IE এর জন্য একটি পলিফিল রয়েছে


2
আপনি যদি কেবল এটি করেন তবে খাটো করা যায় তবে return ele.id == '2'একটি ভাল ES6 সমাধানের জন্য +1।
লাই ফিশ

নতুন করে উত্তর দেওয়া ভাল :) কেবল ভাবছি উপরের উত্তরগুলির চেয়ে পারফরম্যান্স ভাল কিনা বা না ...
Emidomenge

আমি মনে করি যে এটি উল্লেখ করা জরুরী যে 'ডেটা'র রিটার্ন মান (যখন এলি আইডি একটি আইডির সাথে মেলে, যেমন' 21 ') নিজেই অ্যারে আইটেম হতে চলেছে (এই ক্ষেত্রে পুরো আইটেমের অবজেক্ট)। যদি প্রত্যাশাটি ছিল যে ডেটা ভেরিয়েবলের ফলটি মিথ্যা মানের পরিবর্তে 'সত্য' বা 'মিথ্যা' হয়ে থাকে, আপনি খুব হতাশ হবেন।
অ্যাডামজেড

ধন্যবাদ! আমার কাজটি কিছুটা আলাদা ছিল। অ্যারেতে অবজেক্টের সূচক পান => push if <0 || splice(index, 1)এখানে আমার একটি হালনাগাদ কোড রয়েছে:const index = this.selected.indexOf(this.selected.find(s => s.id == passedObj.id))
লিওনিড জাডোরোজ্জিনিখ

29

আমি এটি করার উপায় এখানে

const found = vendors.some(item => item.Name === 'Magenic');

array.some()অ্যারেটিতে কমপক্ষে একটি মান রয়েছে যা মানদণ্ডের সাথে মেলে এবং একটি বুলিয়ান প্রদান করে কিনা তা পদ্ধতি পরীক্ষা করে। এখান থেকে আপনি এখানে যেতে পারেন:

if (found) {
// do something
} else {
// do something else
}

22

আপনি যদি এটির মতো পুনর্গঠন না করতে চান:

vendors = {
    Magenic: {
      Name: 'Magenic',
      ID: 'ABC'
     },
    Microsoft: {
      Name: 'Microsoft',
      ID: 'DEF'
    } and so on... 
};

যা আপনি করতে পারেন if(vendors.Magnetic)

আপনাকে লুপ করতে হবে


2
যদি তিনি এখনও অন্য কোনও বস্তুর কাঠামোটি ব্যবহার করতে চান তবে
কীথ.আব্রামো

21

ECMAScript 6 স্পেসিফিকেশন অনুযায়ী, আপনি ব্যবহার করতে পারেন findIndex

const magenicIndex = vendors.findIndex(vendor => vendor.Name === 'Magenic');

magenicIndexহয় রাখে 0(যা অ্যারেতে সূচক হয়) বা -1এটি না পাওয়া গেলে।


লোককে সচেতন করার জন্য যদি শর্ত হিসাবে ব্যবহৃত হয় তবে 0 টি এখনও একটি মিথ্যা ফলাফল হিসাবে মেলে। এই কারণেই আমি মনে করি আপনি আরও যুক্তিসঙ্গত সত্যতার মূল্যায়ন পাওয়ার সাথে সাথে () আরও ভাল ।
dhj

15

ওপি যেমন প্রশ্ন জিজ্ঞাসা করেছে কী কী আছে কি নেই

ES6 হ্রাস ফাংশন ব্যবহার করে বুলিয়ান ফিরে আসবে এমন আরও একটি মার্জিত সমাধান হতে পারে

const magenicVendorExists =  vendors.reduce((accumulator, vendor) => (accumulator||vendor.Name === "Magenic"), false);

দ্রষ্টব্য: হ্রাসের প্রাথমিক প্যারামিটারটি হ'ল falseএবং অ্যারেটিতে কী থাকলে এটি সত্য হয়।

আশা করি এটি আরও ভাল এবং ক্লিনার কোড প্রয়োগের জন্য সহায়তা করে


1
কখন থেকে !! []] মিথ্যা সমান?
সের্গেই

1
চমৎকার ধরা. হ্রাস ব্যবহার করে আপডেট করা উত্তর :)
জয় চক্র

1
এটা ভুল. প্রথম প্যারামিটারটি reduceহ'ল সংযোজক এবং vendorবস্তুটি নয়। false.Name === "Magenic"প্রতিটি লুপে এটি পরীক্ষা করে এবং এটি মিথ্যা প্রত্যাবর্তন করে
আদিগা

@ আদিগা: সংশোধন হয়েছে।
জয় চক্র

1
মির্জা লেকার সমাধানটিও পরীক্ষা করে দেখুন। আরও অনেক মার্জিত সমাধান।
জে চক্র

13

আপনি সত্যিই বস্তুর দিকে তাকানো ছাড়া পারবেন না।

আপনার সম্ভবত আপনার কাঠামোটি একটু পরিবর্তন করা উচিত like

vendors = {
    Magenic:   'ABC',
    Microsoft: 'DEF'
};

তারপরে আপনি এটি কেবল লুক-হ্যাশের মতো ব্যবহার করতে পারেন।

vendors['Microsoft']; // 'DEF'
vendors['Apple']; // undefined

5

আপনাকে লুপ করতে হবে, এর চারপাশে কোনও উপায় নেই।

function seekVendor(vendors, name) {
  for (var i=0, l=vendors.length; i<l; i++) {
    if (typeof vendors[i] == "object" && vendors[i].Name === name) {
      return vendors[i];
    }
  }
}

অবশ্যই আপনি এটিকে আরও আনন্দদায়ক করতে linq.js এর মতো একটি লাইব্রেরি ব্যবহার করতে পারেন :

Enumerable.From(vendors).Where("$.Name == 'Magenic'").First();

( একটি ডেমো জন্য jsFood দেখুন )

আমি সন্দেহ করি যে লিনক.জেগুলি সরাসরি-ফরোয়ার্ড লুপের চেয়ে দ্রুত হবে তবে জিনিসগুলি কিছুটা জটিল হয়ে গেলে অবশ্যই এটি আরও নমনীয় হয়।


5

অ্যারে উপাদানগুলির জন্য পরীক্ষা করা:

জেএস অ্যারে ফাংশন অফার করে যা আপনাকে এটি তুলনামূলকভাবে সহজে অর্জন করতে দেয়। তারা নিম্নলিখিত:

  1. Array.prototype.filter: একটি কলব্যাক ফাংশন নেয় যা একটি পরীক্ষা, অ্যারে তার সাথে পুনরাবৃত্তি হয় কলব্যাক এবং এই কলব্যাক অনুযায়ী ফিল্টার করা হয়। একটি নতুন ফিল্টারযুক্ত অ্যারে ফিরে এসেছে।
  2. Array.prototype.some: একটি কলব্যাক ফাংশন নেয় যা একটি পরীক্ষা, অ্যারে তার সাথে পুনরাবৃত্তি হয় কলব্যাক এবং যদি কোনও উপাদান পরীক্ষায় উত্তীর্ণ হয়, বুলিয়ান সত্য ফিরে আসে। অন্যথায় মিথ্যা ফিরিয়ে দেওয়া হয়

নির্দিষ্টকরণগুলি উদাহরণের মাধ্যমে সর্বোত্তমভাবে ব্যাখ্যা করা হয়:

উদাহরণ:

vendors = [
    {
      Name: 'Magenic',
      ID: 'ABC'
     },
    {
      Name: 'Microsoft',
      ID: 'DEF'
    } //and so on goes array... 
];

// filter returns a new array, we instantly check if the length 
// is longer than zero of this newly created array
if (vendors.filter(company => company.Name === 'Magenic').length ) {
  console.log('I contain Magenic');
}

// some would be a better option then filter since it directly returns a boolean
if (vendors.some(company => company.Name === 'Magenic')) {
  console.log('I also contain Magenic');
}

ব্রাউজার সমর্থন:

এই 2 ফাংশনটি ES6ফাংশনযুক্ত, সমস্ত ব্রাউজার তাদের সমর্থন করতে পারে না। এটি কাটিয়ে উঠতে আপনি পলিফিল ব্যবহার করতে পারেন। এখানে Array.prototype.some(এমডিএন থেকে) পলিফিল রয়েছে :

if (!Array.prototype.some) {
  Array.prototype.some = function(fun, thisArg) {
    'use strict';

    if (this == null) {
      throw new TypeError('Array.prototype.some called on null or undefined');
    }

    if (typeof fun !== 'function') {
      throw new TypeError();
    }

    var t = Object(this);
    var len = t.length >>> 0;

    for (var i = 0; i < len; i++) {
      if (i in t && fun.call(thisArg, t[i], i, t)) {
        return true;
      }
    }

    return false;
  };
}


5

খুব দেরিতে হতে পারে তবে জাভাস্ক্রিপ্ট অ্যারেতে দুটি পদ্ধতি রয়েছে someএবংevery পদ্ধতি রয়েছে যা একটি বুলিয়ান দেয় এবং আপনাকে এটি অর্জনে সহায়তা করতে পারে।

আমি মনে করি someআপনি যা অর্জন করতে চান তার পক্ষে সবচেয়ে উপযুক্ত হবে।

vendors.some( vendor => vendor['Name'] !== 'Magenic' )

কিছু বৈধতা দেয় যে অ্যারের যে কোনও অবজেক্ট প্রদত্ত শর্তটি সন্তুষ্ট করে।

vendors.every( vendor => vendor['Name'] !== 'Magenic' )

প্রতিটি বৈধতা দেয় যে অ্যারের সমস্ত বস্তু প্রদত্ত শর্তটি সন্তুষ্ট করে।


এটি কার্যকর হয় না const array1 = [{name:'Mike'},{name:'Alice'}]; console.log(array1.every(item => item.name !== 'Mike'));এটি সত্য হওয়া উচিত
থানভা সিএইচ।

দুঃখিত, আমার অর্থ some, আমার উত্তর আপডেট করবে।
আকিনজিওলা টনি

4

আপনি যদি jquery ব্যবহার করে থাকেন তবে আপনি সব মিলিয়ে অবজেক্টের সাথে অ্যারে তৈরি করতে গ্রেপের সুবিধা নিতে পারেন:

var results = $.grep(vendors, function (e) {
    return e.Name == "Magenic";
});

এবং তারপরে ফলাফল অ্যারে ব্যবহার করুন:

for (var i=0, l=results.length; i<l; i++) {
    console.log(results[i].ID);
}

3

আমি ভুল হলে আমাকে সংশোধন করুন .. আমি forEachএই জাতীয় পদ্ধতি ব্যবহার করতে পারতাম ,

var found=false;
vendors.forEach(function(item){
   if(item.name === "name"){
       found=true;

   }
});

আজকাল আমি এটিতে অভ্যস্ত, কারণ এটি সরলতা এবং স্ব-ব্যাখ্যামূলক শব্দ। ধন্যবাদ.


1
দ্রষ্টব্য: এখানে রিটার্নের কোনও ব্যবহার নেই
এডিসন

2

আপনি আমার জন্য এটি কাজ করতে পারেন।

const _ = require('lodash');

var arr = [
  {
    name: 'Jack',
    id: 1
  },
  {
    name: 'Gabriel',
    id: 2
  },
  {
    name: 'John',
    id: 3
  }
]

function findValue(arr,value) {
  return _.filter(arr, function (object) {
    return object['name'].toLowerCase().indexOf(value.toLowerCase()) >= 0;
  });
}

console.log(findValue(arr,'jack'))
//[ { name: 'Jack', id: 1 } ]

আচ্ছা এটি সত্যিই একটি পুরানো প্রশ্ন এবং আমি মনে করি এটির আপডেটটি ইতিমধ্যে সেরা সমাধান রয়েছে।
ফেদেরিকো গালফায়নি

1

আপনি লোডাশ ব্যবহার করতে পারেন । যদি আপনার অ্যাপ্লিকেশনটির জন্য লোডাশ লাইব্রেরিটি খুব ভারী হয় তবে অপ্রয়োজনীয় ফাংশনটি ব্যবহার না করার বিষয়টি বিবেচনা করুন।

let newArray = filter(_this.props.ArrayOne, function(item) {
                    return find(_this.props.ArrayTwo, {"speciesId": item.speciesId});
                });

এটি করার একমাত্র উপায়। আরেকটি হতে পারে:

var newArray=  [];
     _.filter(ArrayOne, function(item) {
                        return AllSpecies.forEach(function(cItem){
                            if (cItem.speciesId == item.speciesId){
                            newArray.push(item);
                          }
                        }) 
                    });

console.log(arr);

উপরের উদাহরণটি যেমন কোনও লাইব্রেরি ব্যবহার না করে আবারও লেখা যায় :

var newArray=  [];
ArrayOne.filter(function(item) {
                return ArrayTwo.forEach(function(cItem){
                    if (cItem.speciesId == item.speciesId){
                    newArray.push(item);
                  }
                }) 
            });
console.log(arr);

আশা করি আমার উত্তরটি সাহায্য করবে।


1

এখানে অনেক উত্তর ভাল এবং বেশ সহজ। তবে যদি আপনার অবজেক্টের অ্যারের মানের একটি নির্দিষ্ট সেট থাকে তবে আপনি নীচের কৌশলটি ব্যবহার করতে পারেন:

একটি বস্তুর সমস্ত নাম মানচিত্র।

vendors = [
    {
      Name: 'Magenic',
      ID: 'ABC'
     },
    {
      Name: 'Microsoft',
      ID: 'DEF'
    }
];

var dirtyObj = {}
for(var count=0;count<vendors.length;count++){
   dirtyObj[vendors[count].Name] = true //or assign which gives you true.
}

এখন এই নোংরা ওবিজে আপনি কোনও লুপ ছাড়াই বারবার ব্যবহার করতে পারেন।

if(dirtyObj[vendor.Name]){
  console.log("Hey! I am available.");
}

1

একটি বস্তুর সাথে অন্যটির তুলনা করতে, আমি একটি ফর ইন লুপ (বস্তুর মাধ্যমে লুপের জন্য ব্যবহৃত) এবং কিছু () একত্রিত করি। আপনার কোনও অ্যারে বাউন্ডারি ইত্যাদির বাইরে চলে যাওয়া নিয়ে চিন্তার দরকার নেই, যাতে কিছু কোড সাশ্রয় হয়। .Some এর ডকুমেন্টেশন এখানে পাওয়া যাবে

var productList = [{id: 'text3'}, {id: 'text2'}, {id: 'text4', product: 'Shampoo'}]; // Example of selected products
var theDatabaseList = [{id: 'text1'}, {id: 'text2'},{id: 'text3'},{id:'text4', product: 'shampoo'}];    
var  objectsFound = [];

for(let objectNumber in productList){
    var currentId = productList[objectNumber].id;   
    if (theDatabaseList.some(obj => obj.id === currentId)) {
        // Do what you need to do with the matching value here
        objectsFound.push(currentId);
    }
}
console.log(objectsFound);

বিকল্পের সাথে আমি একটির সাথে অন্য একটি বস্তুর তুলনা করি হ'ল অবজেক্ট.কিজ ()। দৈর্ঘ্যের সাথে লুপের জন্য নেস্টে থাকা অ্যারেতে অবজেক্টের পরিমাণ পেতে use নীচে কোড:

var productList = [{id: 'text3'}, {id: 'text2'}, {id: 'text4', product: 'Shampoo'}]; // Example of selected products
var theDatabaseList = [{id: 'text1'}, {id: 'text2'},{id: 'text3'},{id:'text4', product: 'shampoo'}];    
var objectsFound = [];

for(var i = 0; i < Object.keys(productList).length; i++){
        for(var j = 0; j < Object.keys(theDatabaseList).length; j++){
        if(productList[i].id === theDatabaseList[j].id){
            objectsFound.push(productList[i].id);
        }       
    }
}
console.log(objectsFound);

আপনার সঠিক প্রশ্নের উত্তর দিতে, যদি কেবল কোনও বস্তুর কোনও মান সন্ধান করা হয় তবে আপনি লুপের জন্য একটি একক ব্যবহার করতে পারেন।

var vendors = [
    {
      Name: 'Magenic',
      ID: 'ABC'
     },
    {
      Name: 'Microsoft',
      ID: 'DEF'
    } 
];

for(var ojectNumbers in vendors){
    if(vendors[ojectNumbers].Name === 'Magenic'){
        console.log('object contains Magenic');
    }
}

0

বিকল্পভাবে আপনি এটি করতে পারেন:

const find = (key, needle) => return !!~vendors.findIndex(v => (v[key] === needle));

1
তিনি কেন এটি করতে পারেন তা আপনি আরও ভাল করে বলতে চাইছেন
আজ্জাবী হ্যাথেম

0

var without2 = (arr, args) => arr.filter(v => v.id !== args.id); উদাহরণ:

without2([{id:1},{id:1},{id:2}],{id:2})

ফলাফল: বিনা 2 ([{আইডি: 1}, {আইডি: 1}, {আইডি: 2}], {আইডি: 2})


আমি মনে করি আপনি ফলাফলটি বলতে চেয়েছিলেন: [{id: 1}, {id: 1}]
আইজাক পাক

0
const a = [{one:2},{two:2},{two:4}]
const b = a.filter(val => "two" in val).length;
if (b) {
   ...
}

3
দয়া করে এবং কিছু বিবরণ এবং নিশ্চিত করুন যে আপনি যে উদাহরণ সরবরাহ করেছেন তা কার্যকর হয় .. (ফিল্টারটি মূল অ্যারে পরিবর্তন করে না তবে এটি ক্লোন করে দেবে)।
মোশে সিমন্তভ

-1

এই সমস্যাটি সমাধান করার জন্য আমার পদ্ধতির ES6 ব্যবহার করা এবং এমন একটি ফাংশন তৈরি করা যা আমাদের পরীক্ষা করে। এই ফাংশন সুবিধার এটি আপনার প্রকল্প প্রদত্ত বস্তুগুলোর যে কোন অ্যারের চেক করতে সারা পুনর্ব্যবহারযোগ্য হতে পারে keyএবং valueবার করো।

প্রচুর কথা বলুন, কোডটি দেখুন

বিন্যাস

const ceos = [
  {
    name: "Jeff Bezos",
    company: "Amazon"
  }, 
  {
    name: "Mark Zuckerberg",
    company: "Facebook"
  }, 
  {
    name: "Tim Cook",
    company: "Apple"
  }
];

ক্রিয়া

const arrayIncludesInObj = (arr, key, valueToCheck) => {
  let found = false;

  arr.some(value => {
    if (value[key] === valueToCheck) {
      found = true;
      return true; // this will break the loop once found
    }
  });

  return found;
}

কল / ব্যবহারের

const found = arrayIncludesInObj(ceos, "name", "Tim Cook"); // true

const found = arrayIncludesInObj(ceos, "name", "Tim Bezos"); // false

-4

আমি বরং রেইগেক্সের সাথে যেতে চাই।

যদি আপনার কোডটি নিম্নরূপ হয়,

vendors = [
    {
      Name: 'Magenic',
      ID: 'ABC'
     },
    {
      Name: 'Microsoft',
      ID: 'DEF'
    }
];

আমি সুপারিশ করতাম

/"Name":"Magenic"/.test(JSON.stringify(vendors))

23
কিছু লোক, যখন কোনও সমস্যার মুখোমুখি হয়, তখন "আমি জানি, আমি নিয়মিত অভিব্যক্তি ব্যবহার করব" think এখন তারা দুটি সমস্যা আছে।
ক্র্যাকারজ্যাক

এটির অধীনে ফাইল করুন, কেবলমাত্র আপনি কিছু করতে পারার অর্থ এই নয় যে আপনার উচিত।
লিয়াম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.