কোনও বস্তু সংগ্রহে রয়েছে কিনা তা পরীক্ষা করতে আমি লোডাসে অন্তর্ভুক্ত পদ্ধতিটি কীভাবে ব্যবহার করব?


146

লড্যাশ আমাকে এর সাথে বেসিক ডেটা ধরণের সদস্যতার জন্য পরীক্ষা করতে দেয় includes:

_.includes([1, 2, 3], 2)
> true

তবে নিম্নলিখিতগুলি কাজ করে না:

_.includes([{"a": 1}, {"b": 2}], {"b": 2})
> false

এটি আমাকে বিভ্রান্ত করে কারণ নীচের পদ্ধতিগুলি যে কোনও সংগ্রহের মাধ্যমে অনুসন্ধান করে তা ঠিকঠাক করে বলে মনে হচ্ছে:

_.where([{"a": 1}, {"b": 2}], {"b": 2})
> {"b": 2}
_.find([{"a": 1}, {"b": 2}], {"b": 2})
> {"b": 2}

আমি কি ভুল করছি? সংগ্রহের সাথে আমি কীভাবে কোনও সামগ্রীর সদস্যতার জন্য যাচাই করব includes?

সম্পাদনা করুন: প্রশ্নটি মূলত লোডাশ সংস্করণ ২.৪.১ এর জন্য ছিল, লডাশ ৪.০.০ এর জন্য আপডেট হয়েছিল


7
_.containsলোডাস ভি 4-তে সরানো হয়েছে - _.includesপরিবর্তে ব্যবহার করুন
বিলি মুন

@ বিলিমুন ওফ! হ্যাঁ আপনি ঠিকই বলেছেন, লোডাশ ভি 4.0.0 (প্রকাশিত 2016-01-12) containsউপনামটি সরিয়ে ফেলে । আমি এটি আপডেট করব
Conrad.Dean

উত্তর:


222

includes(পূর্বে বলা containsএবং include) মেথড রেফারেন্স দ্বারা বস্তু তুলনা (অথবা আরো স্পষ্ট করে, সঙ্গে ===)। কারণ {"b": 2}আপনার উদাহরণে দুটি বস্তুর আক্ষরিকটি বিভিন্ন দৃষ্টান্তের প্রতিনিধিত্ব করে , তারা সমান নয়। বিজ্ঞপ্তি:

({"b": 2} === {"b": 2})
> false

তবে এটি কাজ করবে কারণ এর একমাত্র উদাহরণ রয়েছে {"b": 2}:

var a = {"a": 1}, b = {"b": 2};
_.includes([a, b], b);
> true

অন্যদিকে, where(v4 এ অবমূল্যায়িত) এবং findপদ্ধতিগুলি তাদের বৈশিষ্ট্যগুলির সাথে বস্তুর তুলনা করে, তাই তাদের রেফারেন্স সাম্যতার প্রয়োজন হয় না। এর বিকল্প হিসাবে includes, আপনি চেষ্টা করতে চাইতে পারেন some(এছাড়াও বিকল্প হিসাবেও any):

_.some([{"a": 1}, {"b": 2}], {"b": 2})
> true

12

দ্বারা উত্তর প্রতিস্থাপিত p.s.w.g, এখানে ব্যবহার করে এই অর্জন তিনটি উপায় আছে lodash 4.17.5, ব্যবহার না করেই _.includes() :

বলুন যে আপনি entryঅবজেক্টগুলির একটি অ্যারেতে যুক্ত করতে চান numbers, কেবল যদি entryইতিমধ্যে উপস্থিত না থাকে।

let numbers = [
    { to: 1, from: 2 },
    { to: 3, from: 4 },
    { to: 5, from: 6 },
    { to: 7, from: 8 },
    { to: 1, from: 2 } // intentionally added duplicate
];

let entry = { to: 1, from: 2 };

/* 
 * 1. This will return the *index of the first* element that matches:
 */
_.findIndex(numbers, (o) => { return _.isMatch(o, entry) });
// output: 0


/* 
 * 2. This will return the entry that matches. Even if the entry exists
 *    multiple time, it is only returned once.
 */
_.find(numbers, (o) => { return _.isMatch(o, entry) });
// output: {to: 1, from: 2}


/* 
 * 3. This will return an array of objects containing all the matches.
 *    If an entry exists multiple times, if is returned multiple times.
 */
_.filter(numbers, _.matches(entry));
// output: [{to: 1, from: 2}, {to: 1, from: 2}]

আপনি যদি কোনও ফিরিয়ে দিতে চান Booleanতবে প্রথম ক্ষেত্রে, আপনি যে সূচকটি ফিরে আসছেন তা পরীক্ষা করতে পারেন:

_.findIndex(numbers, (o) => { return _.isMatch(o, entry) }) > -1;
// output: true
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.