কোনও অ্যারে জাভাস্ক্রিপ্টে একটি মান অন্তর্ভুক্ত কিনা তা আমি কীভাবে চেক করব?


3994

জাভাস্ক্রিপ্ট অ্যারেতে কোনও মূল্য রয়েছে কিনা তা সন্ধান করার সবচেয়ে সংক্ষিপ্ত এবং দক্ষ উপায় কী?

এটি করার জন্য আমি কেবল এটিই জানি:

function contains(a, obj) {
    for (var i = 0; i < a.length; i++) {
        if (a[i] === obj) {
            return true;
        }
    }
    return false;
}

এটি সম্পাদন করার জন্য আরও ভাল এবং আরও সংক্ষিপ্ত উপায় কি?

এটি স্ট্যাক ওভারফ্লো প্রশ্নের সাথে খুব ঘনিষ্ঠভাবে সম্পর্কিত একটি জাভাস্ক্রিপ্ট অ্যারেতে কোনও আইটেম সন্ধান করার সেরা উপায়? যা ব্যবহার করে একটি অ্যারেতে অবজেক্টগুলি সন্ধান করে indexOf


49
সবেমাত্র পরীক্ষিত: আপনার উপায়টি ব্রাউজারগুলির জন্য দ্রুততম: jsperf.com/find-element-in-obj-vs-array/2 (ভেরিয়েবলের পূর্ব-সংরক্ষণের ব্যতীত) ইন্ডেক্সফ ব্যবহার করার সময় (যেমন $ .inArray) অনেক ধীর
জার্ন বার্কেফেল্ড

17
অনেকে জবাব দিয়েছেন যে অ্যারে # সূচিপত্র এখানে আপনার সেরা পছন্দ। তবে আপনি যদি বুলিয়ানকে সঠিকভাবে কাস্ট করা যায় এমন কিছু চান তবে এটি ব্যবহার করুন: ~[1,2,3].indexOf(4)0 টি প্রত্যাবর্তন করবে যা মিথ্যা হিসাবে মূল্যায়ন ~[1,2,3].indexOf(3)করবে, আবার ফিরে আসবে -3 যা সত্য হিসাবে মূল্যায়ন করবে।
লর্ডভ্ল্যাড

8
~আপনি বুলিয়ান রূপান্তর করতে যা ব্যবহার করতে চান তা নয়, তার জন্য আপনার প্রয়োজন !। তবে এই ক্ষেত্রে আপনি -1 এর সাথে সাম্যতা পরীক্ষা করতে চান, সুতরাং ফাংশনটি শেষ হতে পারে return [1,2,3].indexOf(3) === -1; ~বাইনারি নয়, এটি পৃথকভাবে প্রতিটি মূল্যকে বিপরীত করে দেবে।
mcfedr

14
@ আইর্ডভ্ল্যাড [1,2,3].indexOf(4)আসলে -১ আসবে । হিসাবে @mcfedr নির্দিষ্ট, ~হয় , bitwise নয় অপারেটর , ES5 11.4.8 দেখুন। বিষয়টি হ'ল যেহেতু বাইনারি উপস্থাপনাটি -1কেবল 1 এর সমন্বিত, এটি পরিপূরক 0, যা মিথ্যা হিসাবে মূল্যায়ন করে। অন্য যে কোনও সংখ্যার পরিপূরকটি শূন্য নয়, সুতরাং এটি সত্য। সুতরাং, ~ঠিক কাজ করে এবং প্রায়শই এটি ব্যবহার করে indexOf
mknecht

5
শিরোনামটি বিভ্রান্তিকর। কোথায় [[1,2],[3,4]].includes([3,4])?
এমপ্লুঞ্জন

উত্তর:


4373

আধুনিক ব্রাউজারগুলিতে রয়েছে Array#includesযা ঠিক তা করে এবং আইআই ব্যতীত সকলের দ্বারা এটি ব্যাপকভাবে সমর্থন করে:

console.log(['joe', 'jane', 'mary'].includes('jane')); //true

আপনি এটিও ব্যবহার করতে পারেন Array#indexOfযা কম সরাসরি, তবে পুরানো ব্রাউজারগুলির জন্য পলিফিলের প্রয়োজন হয় না।


অনেকগুলি ফ্রেমওয়ার্ক একই ধরণের পদ্ধতিও সরবরাহ করে:

লক্ষ্য করুন যে কিছু ফ্রেমওয়ার্কগুলি এটি একটি ফাংশন হিসাবে প্রয়োগ করে, অন্যরা ফাংশনটিকে অ্যারে প্রোটোটাইপে যুক্ত করে।


42
MooTools এ অ্যারে.কন্টেনস রয়েছে যা একটি বুলিয়ান দেয়, যা এখানে আসল প্রশ্নের মতো মনে হচ্ছে।
রায়ান ফ্লোরেন্স

22
প্রোটোটাইপটিতে এটি Array.includeএকটি বুলিয়ানও দেয়
ব্যবহারকারী 102008

46
আপনি যদি একটি ভাল ব্রাউজার ব্যবহার করেন তবে আপনি কেবল ব্যবহার করতে পারেনarray.indexOf(object) != -1
স্যাম সোফেস

13
এছাড়াও, আত ব্যবহার indexOf মধ্যে শর্ত হিসাবে একা, কারণ প্রথম উপাদান 0 ফিরে আসবে এবং falsy যেমন মূল্যায়ন করা হবে
plus-

241
inArrayএকটি ফাংশনটির জন্য একটি ভয়ানক নাম যা উপাদানটির সূচকটি -1দেয় এবং যদি তা বিদ্যমান না থাকে। আমি প্রত্যাশা করব যে কোনও বুলিয়ান ফিরে আসবে।
টিম

433

2019 সালের আপডেট: এই উত্তরটি 2008 (11 বছর বয়সী!) এর এবং আধুনিক জেএস ব্যবহারের জন্য প্রাসঙ্গিক নয়। প্রতিশ্রুতিবদ্ধ পারফরম্যান্সের উন্নতি সেই সময়ের ব্রাউজারগুলিতে করা একটি মানদণ্ডের ভিত্তিতে ছিল। এটি আধুনিক জেএস কার্যকরকরণ প্রসঙ্গে প্রাসঙ্গিক নাও হতে পারে। আপনার যদি সহজ সমাধানের প্রয়োজন হয় তবে অন্যান্য উত্তরগুলি সন্ধান করুন। আপনার যদি সর্বোত্তম পারফরম্যান্সের প্রয়োজন হয় তবে প্রাসঙ্গিক কার্যকর পরিবেশে নিজের জন্য মানদণ্ড।

অন্যরা যেমন বলেছে, অ্যারের মাধ্যমে পুনরাবৃত্তি সম্ভবত সবচেয়ে ভাল উপায় তবে এটি প্রমাণিত হয়েছে যে একটি হ্রাস হওয়া whileলুপটি জাভাস্ক্রিপ্টে পুনরাবৃত্তি করার দ্রুততম উপায়। সুতরাং আপনি নিম্নলিখিত হিসাবে আপনার কোডটি আবার লিখতে চান:

function contains(a, obj) {
    var i = a.length;
    while (i--) {
       if (a[i] === obj) {
           return true;
       }
    }
    return false;
}

অবশ্যই, আপনি পাশাপাশি অ্যারে প্রোটোটাইপ প্রসারিত করতে পারেন:

Array.prototype.contains = function(obj) {
    var i = this.length;
    while (i--) {
        if (this[i] === obj) {
            return true;
        }
    }
    return false;
}

এবং এখন আপনি কেবল নিম্নলিখিতটি ব্যবহার করতে পারেন:

alert([1, 2, 3].contains(2)); // => true
alert([1, 2, 3].contains('2')); // => false

24
কিন্তু সতর্কতা অবলম্বন করা আবশ্যক stackoverflow.com/questions/237104/javascript-array-containsobj/...
MatrixFrog

22
"প্রমাণিত" একটি শক্ত শব্দ। জেএস ইঞ্জিনগুলি ক্রমাগত উন্নতি করে এবং 3 বছর আগে পরিমাপের কার্যকর সময়টি অত্যন্ত মারাত্বক পুরানো।
orip

2
@ দামির - আমি একমত সম্ভবত উপলভ্য থাকলে সূচকগুলি ব্যবহারের জন্য নমুনাটি পরিবর্তন করুন, কেবলমাত্র লোকেরা এই কোডটিকে অন্ধভাবে অনুলিপি করে দিলে তারা সেরা পারফরম্যান্স পাবে।
orip

1
@ সিবিএমিক্স হ্যাঁ, যত্ন অবশ্যই অবশ্যই প্রয়োজন definitely এটি সম্ভবত এমন একটি ক্ষেত্রে ছিল for (o in array)যা সাধারণত অ্যারের মাধ্যমে লুপ করার সময় করা উচিত নয় ...
দামির জেকি

1
এটি করার সর্বোত্তম উপায় হ'ল [1, 2, 3] .indexOf (1)> -1
ডিভিন জি রোড

206

indexOf হতে পারে, তবে এটি "ইসিএমএ-262 স্ট্যান্ডার্ডের জাভাস্ক্রিপ্ট এক্সটেনশন; যেমন এটি স্ট্যান্ডার্ডের অন্যান্য বাস্তবায়নে উপস্থিত নাও হতে পারে।"

উদাহরণ:

[1, 2, 3].indexOf(1) => 0
["foo", "bar", "baz"].indexOf("bar") => 1
[1, 2, 3].indexOf(4) => -1

এএএআইএফএস মাইক্রোসফ্ট এর জন্য কোনও প্রকারের বিকল্প প্রস্তাব করে না , তবে আপনি যদি দ্রুত এক্সপ্লোরার এক্সপ্লোরার (এবং অন্যান্য ব্রাউজারগুলি সমর্থন করেন না indexOf) তে অ্যারেগুলিতে অনুরূপ কার্যকারিতা যুক্ত করতে পারেন, যেমন একটি দ্রুত গুগল অনুসন্ধান প্রকাশ করে (উদাহরণস্বরূপ, এটি একটি )।


প্রকৃতপক্ষে, ব্রাউজারগুলির জন্য সূচকঅফ এক্সটেনশনের একটি বাস্তবায়নের একটি উদাহরণ রয়েছে যা আপনি লিঙ্ক করেছেন এমন বিকাশকারী.মোজিলা.অর্গ পৃষ্ঠায় এটি সমর্থন করে না।
লয়েড কোটেন 21

আসলে, আপনি যদি ব্রাউজারগুলি সমর্থন করে না (যেমন আই 7) এর জন্য অ্যারের প্রোটোটাইপটিতে সূচকটি যুক্ত করেন তবে অ্যারের আইটেমগুলি লুপ করার সময় তারা এই ফাংশনটি লুপ করার চেষ্টা করবে। কদর্য।


এটি কি অবজেক্টের জন্য যাচাই করার জন্য প্রযোজ্য? আমি মনে করি না যে এটি অবজেক্টের ক্ষেত্রে কাজ করে
হিমেশ আবেদরা

168

ECMAScript 7 উপস্থাপন করে Array.prototype.includes

এটি এর মতো ব্যবহার করা যেতে পারে:

[1, 2, 3].includes(2); // true
[1, 2, 3].includes(4); // false

এটি একটি secondচ্ছিক দ্বিতীয় যুক্তিও গ্রহণ করে fromIndex:

[1, 2, 3].includes(3, 3); // false
[1, 2, 3].includes(3, -1); // true

ভিন্ন indexOf, যা ব্যবহার করে যথাযথ সমতা তুলনা , includesব্যবহার তুলনা SameValueZero সমতা অ্যালগরিদম। এর অর্থ হল যে অ্যারেতে একটি অন্তর্ভুক্ত রয়েছে কিনা তা আপনি সনাক্ত করতে পারবেন NaN:

[1, 2, NaN].includes(NaN); // true

এছাড়াও পৃথক indexOf, includesঅনুপস্থিত সূচকগুলি এড়িয়ে যায় না:

new Array(5).includes(undefined); // true

বর্তমানে এটি এখনও একটি খসড়া তবে এটি সমস্ত ব্রাউজারে কাজ করার জন্য পলিফিল্ড করা যেতে পারে ।


3
আইই এবং মাইক্রোসফট এজ (2015) এর জন্য সমর্থিত নয় ( developer.mozilla.org/en-US/docs/Web/JavaScript/References/… )
অ্যাড্রিয়ানো

1
প্রাসঙ্গিক, ES7 সামঞ্জস্যতা টেবিল (ক্রোম এখন এটি সমর্থন করে বলে মনে হচ্ছে)
স্টাইলফেল

এটি কি অবজেক্টের জন্য যাচাই করার জন্য প্রযোজ্য? আমি মনে করি না যে এটি অবজেক্টের ক্ষেত্রে কাজ করে
হিমেশ আবেদরা

128

শীর্ষস্থানীয় উত্তরগুলি আদিম প্রকারগুলি ধরে নিয়েছে তবে আপনি যদি অ্যারেতে কিছু বৈশিষ্ট্যযুক্ত কোনও উপাদান রয়েছে কিনা তা জানতে চান , অ্যারে.প্রোটোটাইপ.সোম () একটি খুব মার্জিত সমাধান:

const items = [ {a: '1'}, {a: '2'}, {a: '3'} ]

items.some(item => item.a === '3')  // returns true
items.some(item => item.a === '4')  // returns false

এটির সম্পর্কে দুর্দান্ত বিষয়টি হল যে একবার এলিমেন্টটি পাওয়া গেলে অযথা পুনরুক্তি চক্রটি বাদ যায় the

এছাড়াও, এটি একটি ifবিবৃতিতে খুব ভাল ফিট করে যেহেতু এটি একটি বুলিয়ান দেয়:

if (items.some(item => item.a === '3')) {
  // do something
}

* যেমন জ্যামেস মন্তব্যে উল্লেখ করেছে, এই উত্তরের সময়, সেপ্টেম্বর 2018, Array.prototype.some()সম্পূর্ণরূপে সমর্থিত: caniuse.com সমর্থন টেবিল


1
আজকের হিসাবে, সেপ্টেম্বর 2018, অ্যারে.প্রোটোটাইপ.সোম () সম্পূর্ণরূপে সমর্থিত: caniuse.com সহায়তা টেবিল
jamess

1
এডাব্লুএস নোড.জেএস লাম্বদার জন্য নোড> = 8.10 এ কাজ করা, সুতরাং এটি দুর্দান্ত। খুব পরিষ্কার এবং সহজ সমাধান! 👍🏻
জর্ডান

1
@ জামেস এটি ভাল সমর্থিত হতে পারে তবে মনে রাখবেন যে Arrow functionsএই উদাহরণে এতটা সমর্থনযোগ্য নয়। আরও তথ্যের জন্য এখানে দেখুন: বিকাশকারী.মোজিলা.আর.ইন-
ইউএস / ডকস / ওয়েব / জাভা স্ক্রিপ্ট / রেফারেন্স /

কিছু শর্ট সার্কিট আছে? অথবা এটির কোনও মান পাওয়া সত্ত্বেও এটি পুরো অ্যারেটি পুনরাবৃত্তি করে?
ডগলাস গ্যাসকেল

@ ডগলাসগ্যাসেল এটি একবারে পাওয়া পুনরাবৃত্তিটি বাতিল করে দেয় (উত্তরে উল্লিখিত)
মাইকেল

112

ধরা যাক আপনি এর মতো একটি অ্যারে সংজ্ঞায়িত করেছেন:

const array = [1, 2, 3, 4]

নীচে সেখানে একটি আছে কিনা তা যাচাইয়ের তিনটি উপায় 3রয়েছে। তাদের সমস্ত পারেন আসতে trueবা false

নেটিভ অ্যারে পদ্ধতি (ES2016 সাল থেকে) ( সামঞ্জস্যতা সারণী )

array.includes(3) // true

কাস্টম অ্যারে পদ্ধতি হিসাবে (প্রাক ES2016)

// Prefixing the method with '_' to avoid name clashes
Object.defineProperty(Array.prototype, '_includes', { value: function (v) { return this.indexOf(v) !== -1 }})
array._includes(3) // true

সাধারণ ফাংশন

const includes = (a, v) => a.indexOf(v) !== -1
includes(array, 3) // true

"বি" অ্যারেতে "এ" থাকলে এটি সত্য হয় ... আমি কীভাবে এটি ব্যাখ্যা করতে জানি না ...
উইলিয়াম মালো

4
এই অংশটি আমি "!! ~" বুঝতে পারি না। এবং আমি মনে করি এটি আই 8 তে কাজ করবে না কারণ আই 88 অ্যারে অবজেক্টে ইনডেক্সফ () সমর্থন করে না।
স্বোলদা

62
"~" হ'ল এমন একটি অপারেটর যা কোনও সংখ্যা থেকে 1 টি মেঝে, বিপরীত এবং বিয়োগ করে। indexOf ব্যর্থ হলে -1 প্রদান করে, সুতরাং "~" -1 "0" তে পরিণত হয়। ব্যবহার "!!" সংখ্যাগুলি বোলেয়ানগুলিতে পরিণত করে (!! 0 === মিথ্যা)
উইলিয়াম মালো

1
শীতল, তবে গুরুত্ব সহকারে y কেবল a.indexOf (b)> - 1 নয়, "> -1"। দৈর্ঘ্য === "!! ~" দৈর্ঘ্য
সুপার

2
আমি বুলিয়ান অপারেটরগুলির প্রভাব সম্পর্কে জ্ঞানের অভাবকে কলুষিত করব না। তবে আমি পঠনযোগ্য কোডের মান সম্পর্কে একমত, আমি অবশ্যই এটি স্পষ্টভাবে লেবেলযুক্ত ফাংশনে আবদ্ধ করব। এবং এটিই সর্বাধিক বড় জেএস ফ্রেমওয়ার্কগুলি করে।
Okdewit

79

এখানে একটি জাভাস্ক্রিপ্ট 1.6 সামঞ্জস্যপূর্ণ বাস্তবায়ন Array.indexOf:

if (!Array.indexOf) {
    Array.indexOf = [].indexOf ?
        function(arr, obj, from) {
            return arr.indexOf(obj, from);
        } :
        function(arr, obj, from) { // (for IE6)
            var l = arr.length,
                i = from ? parseInt((1 * from) + (from < 0 ? l : 0), 10) : 0;
            i = i < 0 ? 0 : i;
            for (; i < l; i++) {
                if (i in arr && arr[i] === obj) {
                    return i;
                }
            }
            return -1;
        };
}

এটি দুর্দান্ত দেখায় তবে কিছুটা বিভ্রান্ত: * 1 এবং 3 লাইনের পরীক্ষাগুলি কি সমান নয়? * প্রোটোটাইপ পরীক্ষা করা এবং প্রয়োজনীয় হলে অ্যারে.প্রোটোটাইপটিতে ফাংশনটি যুক্ত করা ভাল না?
আভি ফ্ল্যাক্স

10
তারা ভারসাম্যহীন নয়। [].indexOfএকটি সংক্ষিপ্তকরণ Array.prototype.indexOf। আমাদের প্যারানয়েড-ডিফেন্সিভ জাভাস্ক্রিপ্ট প্রোগ্রামাররা কোনও মূল্যে দেশীয় প্রোটোটাইপগুলি প্রসারিত করা এড়াতে পারে।
মার আর্লিগসন

1
হয় না [].indexOfএকটি নতুন অ্যারে তৈরি এবং তারপর অ্যাক্সেস indexOf, যখন Array.prototype.indexOfমাত্র প্রোটোটাইপ সরাসরি ব্যবহারের?
অ্যালেক্স

3
@ অ্যালেক্স হ্যাঁ [].indexOf === Array.prototype.indexOf( ফায়ারবগে এটি ব্যবহার করে দেখুন) তবে বিপরীতে [].indexOf !== Array.indexOf
মার আর্লিগসন

57

ব্যবহার করুন:

function isInArray(array, search)
{
    return array.indexOf(search) >= 0;
}

// Usage
if(isInArray(my_array, "my_value"))
{
    //...
}

25
x ? true : falseসাধারণত অনর্থক হয়। এটা এখানে.
রাই-

@ এমনিটেক আপনি কেন এটি অনর্থক বলছেন?
মাতাসে কানেপা

8
array.indexOf(search) >= 0ইতিমধ্যে একটি বুলিয়ান। শুধু return array.indexOf(search) >= 0
রাই-

@ মিনিটেক ভাল ধন্যবাদ! আসলে আমি জানতাম না যে এই জাতীয় নির্মাণটি ফিরে যেতে পারে। নতুন কিছু TIL
মাতাসে কানেপা

আক্ষরিকভাবে জাভাস্ক্রিপ্টে যে কোনও
বিটি

49

জাভাস্ক্রিপ্ট Arrayঅবজেক্টটি বাড়ানো সত্যিই খারাপ ধারণা কারণ আপনি নতুন বৈশিষ্ট্যগুলি (আপনার কাস্টম পদ্ধতিগুলি) for-inলুপগুলিতে প্রবর্তন করেন যা বিদ্যমান স্ক্রিপ্টগুলি ভেঙে দিতে পারে can কয়েক বছর আগে প্রোটোটাইপ লাইব্রেরির লেখককে তাদের লাইব্রেরি বাস্তবায়নের পুনরায় ইঞ্জিনিয়ার করতে হয়েছিল কেবল এই ধরণের জিনিস সরাতে।

আপনার পৃষ্ঠায় চলমান অন্যান্য জাভাস্ক্রিপ্টের সাথে সামঞ্জস্যতা নিয়ে যদি আপনার চিন্তা করার দরকার না হয় তবে এর জন্য যান, অন্যথায়, আমি আরও বিশ্রী, তবে নিরাপদ ফ্রি-স্ট্যান্ডিং ফাংশন সমাধানের পরামর্শ দেব।


22
আমি একমত নই নির্দিষ্ট কারণে এই কারণে অ্যারেগুলির জন্য ইন-লুপগুলি ব্যবহার করা উচিত নয়। জনপ্রিয় জেএস লাইব্রেরিগুলির মধ্যে একটি ব্যবহার করার সময় ইন-লুপগুলি ব্যবহার ভেঙে যায়
টমাস

এটি কি বানরের প্যাচিং হিসাবে বিবেচিত হবে? lol কিছু মানুষ।
সিবিএমিকস

33

এক রৈখিক:

function contains(arr, x) {
    return arr.filter(function(elem) { return elem == x }).length > 0;
}

8
array.filter(e=>e==x).length > 0এর সমতুল্য array.some(e=>e==x)তবে someআরও দক্ষ
অ্যাপোলো

32

একটি সেকেন্ডের জন্য বাক্সের বাইরে চিন্তা করে, আপনি যদি এই কলটি বহুবার করে থাকেন তবে হ্যাশ ফাংশনটি ব্যবহার করে লকআপগুলি করতে কোনও মিশুক অ্যারে মানচিত্র ব্যবহার করা আরও বেশি দক্ষ ।

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map


যদিও এটি অনেকের পক্ষে স্পষ্টতই সহায়ক, একটি কোড স্নিপেট যুক্ত করা ভাল ছিল better
পাই 'ওহ' Pah


24
function contains(a, obj) {
    return a.some(function(element){return element == obj;})
}

অ্যারে.প্রোটোটাইপ.সোম () 5 তম সংস্করণে ইসিএমএ -262 স্ট্যান্ডার্ডে যুক্ত হয়েছিল


যদি এস -6 এর থেকে ক্যামের চেয়ে কম ব্যবহার করা হয়contains = (a, obj) => a.some((element) => element === obj))
ডায়িচো

এমনকি আইসি 9 এর অ্যারে.প্রোটোটাইপ.সোম () এর ECMAScript 5 হিসাবে সমর্থন রয়েছে ।
সানক্যাট 2000

19

একটি আশাবাদী দ্রুত দ্বিদ্বিতীয় indexOf/ lastIndexOfবিকল্প

2015

যদিও নতুন পদ্ধতিটি অন্তর্ভুক্ত রয়েছে এটি খুব দুর্দান্ত, সমর্থনটি বর্তমানে আপাতত শূন্য।

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

শীর্ষস্থানীয় উত্তরগুলির দিকে তাকিয়ে ইতিমধ্যে একটি পারফর্মেন্ট উপায় খুঁজে পাওয়া গেছে। তাদের কাছ থেকে আমি contains@ দামির জেকিক দ্বারা পোস্ট করা ফাংশনটি বেছে নিয়েছি যা দ্রুত হওয়া উচিত। তবে এটি আরও বলেছে যে মানদণ্ডগুলি ২০০৮ সালের এবং তাই পুরানো।

আমিও whileবেশি পছন্দ করি for, তবে একটি নির্দিষ্ট কারণে নয়, আমি ফাংশনটি লুপ দিয়ে লিখে শেষ করেছি। এটি একটি দিয়েও করা যেতে পারেwhile --

আমি কৌতূহল ছিলাম যদি পুনরাবৃত্তিটি যদি খুব ধীর হয় তবে এটি করার সময় যদি আমি অ্যারের উভয় দিকটি পরীক্ষা করি। স্পষ্টত না, এবং তাই এই ফাংশনটি শীর্ষ ভোটদানকারীদের চেয়ে প্রায় দ্বিগুণ দ্রুত। স্পষ্টতই এটি দেশীয়ের চেয়েও দ্রুত। এটি আসল বিশ্বের পরিবেশে, যেখানে আপনি কখনই জানেন না যে আপনি যে মানটি অনুসন্ধান করছেন তা শুরুতে বা অ্যারের শেষে রয়েছে কিনা you

যখন আপনি জানেন যে আপনি কেবলমাত্র একটি মান দিয়ে একটি অ্যারে ঠেলাঠেলি করেছেন, সর্বশেষ সমাধানটি রয়ে গেছে সর্বশেষতম সমাধান, তবে যদি আপনাকে বড় অ্যারে দিয়ে ভ্রমণ করতে হয় এবং ফলাফল সর্বত্রই হতে পারে তবে জিনিসগুলি দ্রুততর করার জন্য এটি একটি কঠিন সমাধান হতে পারে।

দ্বি নির্দেশমূলক সূচকআফ / সর্বশেষতম সূচক

function bidirectionalIndexOf(a, b, c, d, e){
  for(c=a.length,d=c*1; c--; ){
    if(a[c]==b) return c; //or this[c]===b
    if(a[e=d-1-c]==b) return e; //or a[e=d-1-c]===b
  }
  return -1
}

//Usage
bidirectionalIndexOf(array,'value');

কর্মক্ষমতা পরীক্ষা

http://jsperf.com/bidirectionalindexof

পরীক্ষা হিসাবে আমি 100k এন্ট্রি সহ একটি অ্যারে তৈরি করেছি।

তিনটি প্রশ্ন: শুরুতে, মাঝখানে এবং অ্যারের শেষে।

আমি আশা করি আপনিও এই আকর্ষণীয় খুঁজে পেতে এবং পারফরম্যান্স পরীক্ষা।

নোট: আপনি দেখতে পারেন আমি সামান্য পরিবর্তিত contains(তাই মূলত ফাংশন indexOf মধ্যে & lastIndexOf আউটপুট প্রতিফলিত করার trueসঙ্গে indexএবং falseসঙ্গে -1)। এটির ক্ষতি করা উচিত নয়।

অ্যারের প্রোটোটাইপ বৈকল্পিক

Object.defineProperty(Array.prototype,'bidirectionalIndexOf',{value:function(b,c,d,e){
  for(c=this.length,d=c*1; c--; ){
    if(this[c]==b) return c; //or this[c]===b
    if(this[e=d-1-c] == b) return e; //or this[e=d-1-c]===b
  }
  return -1
},writable:false, enumerable:false});

// Usage
array.bidirectionalIndexOf('value');

ফাংশনটি সহজেই সত্য বা মিথ্যা বা এমনকি বস্তু, স্ট্রিং বা যা কিছু হোক না কেন ফিরে আসতে পারে।

এবং এখানে whileরূপটি:

function bidirectionalIndexOf(a, b, c, d){
  c=a.length; d=c-1;
  while(c--){
    if(b===a[c]) return c;
    if(b===a[d-c]) return d-c;
  }
  return c
}

// Usage
bidirectionalIndexOf(array,'value');

এটা কিভাবে সম্ভব?

আমি মনে করি যে অ্যারেতে প্রতিফলিত সূচকটি পাওয়া সহজ গণনা এত সহজ যে এটি আসল লুপ পুনরাবৃত্তির চেয়ে দ্বিগুণ দ্রুত faster

এখানে পুনরাবৃত্তি প্রতি তিনটি চেক করা একটি জটিল উদাহরণ রয়েছে, তবে এটি কেবলমাত্র দীর্ঘতর গণনা দ্বারা সম্ভব যা কোডের মন্দার কারণ হয়।

http://jsperf.com/bidirectionalindexof/2


18

কর্মক্ষমতা

আজ 2020.01.07 আমি 15 টি নির্বাচিত সমাধানের জন্য ক্রোম ভি 78.0.0, সাফারি ভি 13.0.4 এবং ফায়ারফক্স ভি 71.0.0 এ ম্যাকওস হাইসিয়ার 10.13.6 এ পরীক্ষা করে নিই। উপসংহার

  • সমাধান উপর ভিত্তি করে JSON, Setএবং আশ্চর্যজনক find(কে, এন, হে) সকল ব্রাউজারে ধীরতম হয়
  • es6 includes(F) কেবল ক্রোমের উপর দ্রুত
  • for(সি, ডি) এবং এর উপর ভিত্তি করে সমাধানগুলিindexOf (জি, এইচ) এর ছোট এবং বড় অ্যারেগুলিতে সমস্ত ব্রাউজারগুলিতে বেশ দ্রুত হয় তাই সম্ভবত দক্ষ সমাধানের জন্য তারা সেরা পছন্দ probably
  • সমাধানগুলি যেখানে লুপের সময় সূচক হ্রাস পায়, (বি) সম্ভবত সিপিইউ ক্যাশে কাজ করার কারণে ধীর ।
  • অনুসন্ধানের উপাদান অ্যারে দৈর্ঘ্যের 66% অবস্থানে ছিল এবং আমি for(সি, ডি, ই) এর ভিত্তিতে সমাধানগুলি অনুরূপ ফলাফল দেয় (630 ডলার / সেকেন্ড - - তবে সাফারি এবং ফায়ারফক্সে E 10- সি এবং ডি থেকে 20% ধীর)

ফলাফল

এখানে চিত্র বর্ণনা লিখুন

বিস্তারিত

আমি 2 টি পরীক্ষার কেস সম্পাদন করি: 10 টি উপাদান সহ অ্যারের জন্য এবং 1 মিলিয়ন উপাদান সহ অ্যারে। উভয় ক্ষেত্রেই আমরা অনুসন্ধানের উপাদানটিকে অ্যারের মাঝখানে রেখেছি।

অ্যারে ছোট - 10 টি উপাদান

আপনি এখানে আপনার মেশিনে পরীক্ষা করতে পারেন

এখানে চিত্র বর্ণনা লিখুন

অ্যারে বড় - 1.000.000 উপাদান

আপনি এখানে আপনার মেশিনে পরীক্ষা করতে পারেন

এখানে চিত্র বর্ণনা লিখুন


16

আপনি যদি জাভাস্ক্রিপ্ট ১.6 বা তার পরে (ফায়ারফক্স 1.5 বা তার পরে) ব্যবহার করছেন তবে আপনি অ্যারে.ইন্ডেক্সফ ব্যবহার করতে পারেন । অন্যথায়, আমি মনে করি আপনি আপনার মূল কোডের অনুরূপ কিছু শেষ করতে চলেছেন।


16
function inArray(elem,array)
{
    var len = array.length;
    for(var i = 0 ; i < len;i++)
    {
        if(array[i] == elem){return i;}
    }
    return -1;
} 

যদি পাওয়া যায় তবে অ্যারে সূচক, বা -1 না পাওয়া যায়


16

আমরা এই স্নিপেট (অবজেক্টস, অ্যারে, স্ট্রিংগুলির সাথে কাজ করে) ব্যবহার করি:

/*
 * @function
 * @name Object.prototype.inArray
 * @description Extend Object prototype within inArray function
 *
 * @param {mix}    needle       - Search-able needle
 * @param {bool}   searchInKey  - Search needle in keys?
 *
 */
Object.defineProperty(Object.prototype, 'inArray',{
    value: function(needle, searchInKey){

        var object = this;

        if( Object.prototype.toString.call(needle) === '[object Object]' || 
            Object.prototype.toString.call(needle) === '[object Array]'){
            needle = JSON.stringify(needle);
        }

        return Object.keys(object).some(function(key){

            var value = object[key];

            if( Object.prototype.toString.call(value) === '[object Object]' || 
                Object.prototype.toString.call(value) === '[object Array]'){
                value = JSON.stringify(value);
            }

            if(searchInKey){
                if(value === needle || key === needle){
                return true;
                }
            }else{
                if(value === needle){
                    return true;
                }
            }
        });
    },
    writable: true,
    configurable: true,
    enumerable: false
});

ব্যবহার:

var a = {one: "first", two: "second", foo: {three: "third"}};
a.inArray("first");          //true
a.inArray("foo");            //false
a.inArray("foo", true);      //true - search by keys
a.inArray({three: "third"}); //true

var b = ["one", "two", "three", "four", {foo: 'val'}];
b.inArray("one");         //true
b.inArray('foo');         //false
b.inArray({foo: 'val'})   //true
b.inArray("{foo: 'val'}") //false

var c = "String";
c.inArray("S");        //true
c.inArray("s");        //false
c.inArray("2", true);  //true
c.inArray("20", true); //false

15

আপনি যদি অ্যারেতে কোনও অবজেক্টের অস্তিত্বের জন্য বারবার যাচাই করে থাকেন তবে আপনার সম্ভবত এটি সন্ধান করা উচিত

  1. আপনার অ্যারেতে সন্নিবেশ সাজানোর মাধ্যমে অ্যারেটিকে সর্বদা বাছাই করা (নতুন স্থানে সঠিক স্থানে রাখুন)
  2. অপসারণ অবজেক্টগুলি অপসারণ হিসাবে + সরান সন্নিবেশ অপারেশন এবং
  3. আপনার মধ্যে একটি বাইনারি অনুসন্ধান অনুসন্ধান ব্যবহার করুন contains(a, obj)

2
অথবা যদি সম্ভব হয় তবে একটি অ্যারে পুরোপুরি ব্যবহার বন্ধ করুন, এবং এর পরিবর্তে কোনও বস্তু অভিধান হিসাবে ব্যবহার করুন, যেমনটি ম্যাথএমসিএকনাইট এবং নিনজেকেকোর পরামর্শ দিয়েছে।
জোয়েটউইডল

13

সমস্ত আধুনিক ব্রাউজারে কাজ করে এমন সমাধান:

function contains(arr, obj) {
  const stringifiedObj = JSON.stringify(obj); // Cache our object to not call `JSON.stringify` on every iteration
  return arr.some(item => JSON.stringify(item) === stringifiedObj);
}

ব্যবহার:

contains([{a: 1}, {a: 2}], {a: 1}); // true

আই 6 solution সমাধান:

function contains(arr, obj) {
  var stringifiedObj = JSON.stringify(obj)
  return arr.some(function (item) {
    return JSON.stringify(item) === stringifiedObj;
  });
}

// .some polyfill, not needed for IE9+
if (!('some' in Array.prototype)) {
  Array.prototype.some = function (tester, that /*opt*/) {
    for (var i = 0, n = this.length; i < n; i++) {
      if (i in this && tester.call(that, this[i], i, this)) return true;
    } return false;
  };
}

ব্যবহার:

contains([{a: 1}, {a: 2}], {a: 1}); // true

কেন ব্যবহার করবেন JSON.stringify?

Array.indexOfএবং Array.includes(পাশাপাশি বেশিরভাগ উত্তর এখানে) কেবলমাত্র রেফারেন্সের সাথে তুলনা করে মান দ্বারা নয়।

[{a: 1}, {a: 2}].includes({a: 1});
// false, because {a: 1} is a new object

বোনাস

অপ-অপ্টিমাইজড ES6 ওয়ান-লাইনার:

[{a: 1}, {a: 2}].some(item => JSON.stringify(item) === JSON.stringify({a: 1));
// true

দ্রষ্টব্য: মানগুলি অনুসারে বস্তুর তুলনা করা যদি কীগুলি একই ক্রমে থাকে তবে নিরাপদ থাকতে আপনি কীগুলি প্রথমে এর মতো প্যাকেজের সাথে বাছাই করতে পারেন: https://www.npmjs.com/package/sort-keys


containsপারফেক্ট অপটিমাইজেশন সহ ফাংশন আপডেট করেছে । ধন্যবাদ itinance এটা ইশারা জন্য।


কোডের এই নির্দিষ্ট অংশটি আই 6-তে কাজ করতে পারে (পরীক্ষা করে নি) তবে আইই আই 9 পর্যন্ত ইএস 5 সমর্থন করে না।
মার্ক রিড

কার্য সম্পাদনের কারণে আপনার স্ট্রিংফাইং এড়ানো উচিত। কমপক্ষে আপনার JSON এড়ানো উচিত every প্রতিটি লুপের "আপত্তি "টি স্ট্রাইফাই করুন কারণ এটি ব্যয়বহুল এবং আপনার অ্যাপ্লিকেশনটি কমিয়ে দেবে। অতএব আপনি এটি একটি অস্থায়ী পরিবর্তনশীল মধ্যে লুপ আগে ক্যাপচার উচিত
itinance

1
@ আইটেমেন্স ভাল পয়েন্ট। includesআপনার পরামর্শ সঙ্গে ফাংশন আপডেট । আমি আমার ফাংশন দিয়ে jsperf দৌড়েছি। এটি লোড্যাশের অন্তর্ভুক্তের চেয়ে প্রায় 5x ধীর। যদিও lodash মান তুলনা করে না এবং খুঁজে পাচ্ছি না {a: 1}যে [{a: 1}]। কোন লাইব্রেরি এটা করে কিনা জানি না। তবে আমি আরও আগ্রহী যে যদি এর বাইরে আরও কোনও পারফরম্যান্ট না হয় এবং তা করার জন্য খুব জটিল উপায় না থাকে।
ইগর বারবাশিন

দেরী দ্রষ্টব্য: এটি বলে, এর সাথে কাজ করে না contains([{ a: 1, b: 2 }], { b: 2, a: 1 })কারণ স্ট্রিংযুক্ত বস্তুগুলি বৈশিষ্ট্যের ক্রম বজায় রাখে।
হেরেটিক বানর

1
পুনঃটুইট করেছেন এজন্য আমি sort-keysনোটটি নীচে যুক্ত করেছি
আইগর বারবাশিন

12

লোডাশের কিছু ফাংশন ব্যবহার করুন ।

এটি সংক্ষিপ্ত, সঠিক এবং দুর্দান্ত ক্রস প্ল্যাটফর্ম সমর্থন রয়েছে।

গৃহীত উত্তর এমনকি প্রয়োজনীয়তা পূরণ করে না।

প্রয়োজনীয়তা: জাভাস্ক্রিপ্ট অ্যারেতে কোনও বস্তু রয়েছে কিনা তা খুঁজে বের করার সর্বাধিক সংক্ষিপ্ত এবং দক্ষ উপায়ের পরামর্শ দিন।

গৃহীত উত্তর:

$.inArray({'b': 2}, [{'a': 1}, {'b': 2}])
> -1

আমার সুপারিশ:

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

মন্তব্য:

in .আররে স্ক্যালারগুলির একটি অ্যারেতে স্কেলারের মান বিদ্যমান কিনা তা নির্ধারণের জন্য সূক্ষ্ম কাজ করে ...

$.inArray(2, [1,2])
> 1

... তবে প্রশ্নটি পরিষ্কারভাবে নির্ধারণ করার জন্য একটি কার্যকর উপায়ের জন্য জিজ্ঞাসা করে যে কোনও বস্তু অ্যারেতে রয়েছে কিনা তা ।

উভয় স্কেলার এবং অবজেক্ট পরিচালনা করার জন্য আপনি এটি করতে পারেন:

(_.isObject(item)) ? _.some(ary, item) : (_.indexOf(ary, item) > -1)

10

ECMAScript 6 এর সন্ধানের জন্য একটি মার্জিত প্রস্তাব রয়েছে।

সন্ধানের পদ্ধতিটি অ্যারে উপস্থিত প্রতিটি উপাদানগুলির জন্য একবার কলব্যাক ফাংশন কার্যকর করে যতক্ষণ না এটি কলব্যাকের সত্যিকার মান দেয় এমন কোনও সন্ধান না করে। যদি এই জাতীয় উপাদানটি পাওয়া যায় তবে তাৎক্ষণিকভাবে সেই উপাদানটির মান প্রদান করে। অন্যথায়, রিটার্ন অপরিশোধিত সন্ধান করুন। কলব্যাক কেবল অ্যারের সূচকগুলির জন্য অনুরোধ করা হয়েছে যা মানগুলি নির্ধারিত করেছে; এটি মুছে ফেলা হয়েছে বা যা কখনও মান নির্ধারিত হয় নি এমন সূচিগুলির জন্য অনুরোধ করা হয়নি।

এখানে এমডিএন ডকুমেন্টেশন রয়েছে।

ফাংশনটির কার্যকারিতা এর মতো কাজ করে।

function isPrime(element, index, array) {
    var start = 2;
    while (start <= Math.sqrt(element)) {
        if (element % start++ < 1) return false;
    }
    return (element > 1);
}

console.log( [4, 6, 8, 12].find(isPrime) ); // Undefined, not found
console.log( [4, 5, 8, 12].find(isPrime) ); // 5

আপনি এটি ফাংশনটি সংজ্ঞায়িত করে ECMAScript 5 এবং নীচে ব্যবহার করতে পারেন ।

if (!Array.prototype.find) {
  Object.defineProperty(Array.prototype, 'find', {
    enumerable: false,
    configurable: true,
    writable: true,
    value: function(predicate) {
      if (this == null) {
        throw new TypeError('Array.prototype.find called on null or undefined');
      }
      if (typeof predicate !== 'function') {
        throw new TypeError('predicate must be a function');
      }
      var list = Object(this);
      var length = list.length >>> 0;
      var thisArg = arguments[1];
      var value;

      for (var i = 0; i < length; i++) {
        if (i in list) {
          value = list[i];
          if (predicate.call(thisArg, value, i, list)) {
            return value;
          }
        }
      }
      return undefined;
    }
  });
}

এটি এখন একটি স্ট্যান্ডার্ড: ecma-international.org/ecma-262/6.0/#sec-array.prototype.find
ম্যাডব্রেকস

9

যদিও array.indexOf(x)!=-1সবচেয়ে সংক্ষিপ্ত পথ এই কাজ করতে হবে (এবং উপর দশক ... এর জন্য অ ইন্টারনেট এক্সপ্লোরার ব্রাউজার দ্বারা সমর্থিত হয়েছে), তাই না হে (1), বরং হে (ঢ), যা ভয়ানক হয়। যদি আপনার অ্যারে পরিবর্তন না হয় তবে আপনি নিজের অ্যারেটিকে হ্যাশটেবলে রূপান্তর করতে পারেন, তারপরে table[x]!==undefinedবা করুন ===undefined:

Array.prototype.toTable = function() {
    var t = {};
    this.forEach(function(x){t[x]=true});
    return t;
}

ডেমো:

var toRemove = [2,4].toTable();
[1,2,3,4,5].filter(function(x){return toRemove[x]===undefined})

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


9

" সেট (ব্যবহার)" পদ্ধতি রয়েছে এমন একটি সেট ব্যবহার করতে পারেন :

function contains(arr, obj) {
      var proxy = new Set(arr);
      if (proxy.has(obj))
        return true;
      else
        return false;
    }

    var arr = ['Happy', 'New', 'Year'];
    console.log(contains(arr, 'Happy'));


5
আমি মনে করি return proxy.has(obj)যদি এখানে অন্য বিবৃতি দিয়ে দুটি রেখার চেয়ে অনেক বেশি পরিচ্ছন্ন
ম্যাকিয়েজ বুকোভস্কি

function contains(arr, obj) { return new Set(arr).has(obj); }
গর্ডন বিন

8

ব্যবহার করুন:

var myArray = ['yellow', 'orange', 'red'] ;

alert(!!~myArray.indexOf('red')); //true

ডেমো

tilde ~এই মুহুর্তে ঠিক কী করবেন তা জানতে , এই প্রশ্নটি পড়ুন টিলড একটি ভাব প্রকাশের আগে কী করবে?


5
এটি ইতিমধ্যে দেড় বছর আগে পোস্ট করা হয়েছিল এবং এর পুনরাবৃত্তি করার দরকার নেই।
শ্যাডো উইজার্ড আপনার পক্ষে কান

3
আসলে, এটি পোস্ট করা হয়নি। কোনও উত্তর হিসাবে নয়, তবে একটি উত্তরের মন্তব্য হিসাবে এবং তারপরেও এটি পরিষ্কার এবং সংক্ষিপ্ত নয়। এটি পোস্ট করার জন্য ধন্যবাদ, মিনা গ্যাব্রিয়েল।
টি.সি.কে

6

ঠিক আছে, ফলাফল পেতে আপনি কেবল নিজের কোডটি অপ্টিমাইজ করতে পারেন !

এটি করার অনেক উপায় রয়েছে যা পরিষ্কার এবং সর্বোত্তম, তবে আমি কেবল আপনার প্যাটার্নটি পেতে এবং এটি ব্যবহার করে প্রয়োগ করতে চেয়েছিলাম JSON.stringify, কেবল আপনার ক্ষেত্রে এই জাতীয় কিছু করুন:

function contains(a, obj) {
    for (var i = 0; i < a.length; i++) {
        if (JSON.stringify(a[i]) === JSON.stringify(obj)) {
            return true;
        }
    }
    return false;
}

দেরী দ্রষ্টব্য: এটি বলে, এর সাথে কাজ করে না contains([{ a: 1, b: 2 }], { b: 2, a: 1 })কারণ স্ট্রিংযুক্ত বস্তুগুলি বৈশিষ্ট্যের ক্রম বজায় রাখে।
হেরেটিক বানর

5

কোনওভাবেই সেরা নয়, তবে আমি কেবল সৃজনশীল হয়ে উঠছিলাম এবং খণ্ডনটিতে যুক্ত হচ্ছিলাম।

এটি ব্যবহার করবেন না

Object.defineProperty(Array.prototype, 'exists', {
  value: function(element, index) {

    var index = index || 0

    return index === this.length ? -1 : this[index] === element ? index : this.exists(element, ++index)
  }
})


// Outputs 1
console.log(['one', 'two'].exists('two'));

// Outputs -1
console.log(['one', 'two'].exists('three'));

console.log(['one', 'two', 'three', 'four'].exists('four'));


এটি না হলে আপনার কী ব্যবহার করা উচিত?
bryc

@ ব্রাইক হতে পারে গৃহীত সমাধান, বা এখান থেকে অন্য কোনও সমাধান। আপনি যদি পারফরম্যান্সের জন্য খুব বেশি যত্ন না পান তবে আপনি এটি ব্যবহার করতে পারেন
স্ক্যাল্রাম

5

অবাক করে দিয়েছি যে এই প্রশ্নটিতে আমার সর্বনিম্ন সিনট্যাক্স যুক্ত হয়নি, আমার 2 সেন্ট যোগ করেছে।

আসুন আমরা আমাদের অবজেক্টগুলির অ্যারেবজ আছে এবং এটিতে আমরা অনুসন্ধান করতে চাই।

Array.prototype। indexOf মধ্যে -> (রিটার্ন সূচক বা -1 ) সাধারণত অ্যারের মধ্যে উপাদান সূচক খোঁজার জন্য ব্যবহার করা হয়। এটি অনুসন্ধানের অবজেক্টের জন্যও ব্যবহার করা যেতে পারে তবে আপনি যদি একই বস্তুর রেফারেন্সটি পাস করেন কেবল তখনই কাজ করে।

let obj = { name: 'Sumer', age: 36 };
let arrObj = [obj, { name: 'Kishor', age: 46 }, { name: 'Rupen', age: 26 }];


console.log(arrObj.indexOf(obj));// 0
console.log(arrObj.indexOf({ name: 'Sumer', age: 36 })); //-1

console.log([1, 3, 5, 2].indexOf(2)); //3

Array.prototype। অন্তর্ভুক্ত -> ( সত্য বা মিথ্যা প্রত্যাবর্তন )

console.log(arrObj.includes(obj));  //true
console.log(arrObj.includes({ name: 'Sumer', age: 36 })); //false

console.log([1, 3, 5, 2].includes(2)); //true

Array.prototype। সন্ধান করুন -> (কলব্যাক নেয়, প্রথম মান / অবজেক্ট দেয় যা সিবিতে সত্য ফিরে আসে) returns

console.log(arrObj.find(e => e.age > 40));  //{ name: 'Kishor', age: 46 }
console.log(arrObj.find(e => e.age > 40)); //{ name: 'Kishor', age: 46 }

console.log([1, 3, 5, 2].find(e => e > 2)); //3

Array.prototype। FindIndex -> (কলব্যাক নেয়, প্রথম মান / অবজেক্টের সূচক ফেরত দেয় যা সিবি-তে সত্য ফিরে আসে)।

console.log(arrObj.findIndex(e => e.age > 40));  //1
console.log(arrObj.findIndex(e => e.age > 40)); //1

console.log([1, 3, 5, 2].findIndex(e => e > 2)); //1

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


5

এই প্রয়োজনীয়তার জন্য সহজ সমাধান ব্যবহার করা হয় find()

আপনার যদি নীচের মতো জিনিসগুলির অ্যারে থাকে,

var users = [{id: "101", name: "Choose one..."},
{id: "102", name: "shilpa"},
{id: "103", name: "anita"},
{id: "104", name: "admin"},
{id: "105", name: "user"}];

তারপরে আপনি যাচাই করতে পারেন যে আপনার মানযুক্ত বস্তুটি ইতিমধ্যে উপস্থিত রয়েছে কি না

let data = users.find(object => object['id'] === '104');

ডেটা যদি নাল হয় তবে কোনও অ্যাডমিন নেই, অন্যথায় এটি নীচের মতো বিদ্যমান অবজেক্টটি ফিরিয়ে দেবে।

{id: "104", name: "admin"}

তারপরে আপনি অ্যারেতে সেই অবজেক্টের সূচকটি খুঁজে পেতে পারেন এবং নীচের কোড ব্যবহার করে অবজেক্টটি প্রতিস্থাপন করতে পারেন।

let indexToUpdate = users.indexOf(data);
let newObject = {id: "104", name: "customer"};
users[indexToUpdate] = newObject;//your new object
console.log(users);

আপনি নীচের মত মান পাবেন

[{id: "101", name: "Choose one..."},
{id: "102", name: "shilpa"},
{id: "103", name: "anita"},
{id: "104", name: "customer"},
{id: "105", name: "user"}];

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


5

    function countArray(originalArray) {
     
    	var compressed = [];
    	// make a copy of the input array
    	var copyArray = originalArray.slice(0);
     
    	// first loop goes over every element
    	for (var i = 0; i < originalArray.length; i++) {
     
    		var count = 0;	
    		// loop over every element in the copy and see if it's the same
    		for (var w = 0; w < copyArray.length; w++) {
    			if (originalArray[i] == copyArray[w]) {
    				// increase amount of times duplicate is found
    				count++;
    				// sets item to undefined
    				delete copyArray[w];
    			}
    		}
     
    		if (count > 0) {
    			var a = new Object();
    			a.value = originalArray[i];
    			a.count = count;
    			compressed.push(a);
    		}
    	}
     
    	return compressed;
    };
    
    // It should go something like this:
    
    var testArray = new Array("dog", "dog", "cat", "buffalo", "wolf", "cat", "tiger", "cat");
    var newArray = countArray(testArray);
    console.log(newArray);

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