জাভাস্ক্রিপ্টে কোনও অ্যারেতে অন্য অ্যারের কোনও উপাদান রয়েছে কিনা তা পরীক্ষা করুন


406

আমার একটি লক্ষ্য অ্যারে রয়েছে ["apple","banana","orange"]এবং আমি অন্যান্য অ্যারেতে লক্ষ্য অ্যারের উপাদানগুলির মধ্যে একটি রয়েছে কিনা তা পরীক্ষা করে দেখতে চাই।

উদাহরণ স্বরূপ:

["apple","grape"] //returns true;

["apple","banana","pineapple"] //returns true;

["grape", "pineapple"] //returns false;

আমি কীভাবে এটি জাভাস্ক্রিপ্টে করতে পারি?


3
forলক্ষ্য অ্যারের উপরে একটি লুপ এবং পুনরাবৃত্তি ব্যবহার করুন । প্রতিটি উপাদান বর্তমান অ্যারের (ব্যবহারের মধ্যে অন্তর্ভুক্ত করা হয় তাহলে current.indexOf(elem) !== -1)।, তারপর তারা সেখানে সব করছি
ব্লেন্ডার

21
@ অ্যালেক্স একটি উত্তর বাছাই করুন, বিশেষ করে এই অনেক ভাল উত্তর সহ একটি উত্তর চেক করা ছেড়ে দেওয়া অভদ্র is আমি যদি আপনি থাকতাম তবে আমি আন্ডারস্কোর / লোডাশ বেছে নেব।
লিওন গাবান

1
@ লিওনগাবান আমি কেবল এই অপারেশনটি সম্পাদন করার জন্য একটি লাইব্রেরি আমদানি করব না।
দেবপাটো

2
@ দেবপাটো হ্যাঁ আমার মন পরিবর্তন হয়েছে, ES6 সমাধানটি আমার পক্ষে
লিওন গাবান

Arr1.some (el1 => arr2.includes (el1)) সম্পর্কে কী হবে; ?
ওয়ালাস্কা

উত্তর:


551

ভ্যানিলা জেএস

ES2016:

const found = arr1.some(r=> arr2.includes(r))

ES6:

const found = arr1.some(r=> arr2.indexOf(r) >= 0)

কিভাবে এটা কাজ করে

some(..)অ্যারের প্রতিটি উপাদান একটি পরীক্ষা ফাংশনের বিরুদ্ধে পরীক্ষা করে এবং অ্যারের কোনও উপাদান পরীক্ষার কার্যটি পাস করলে সত্যটি ফিরে আসে, অন্যথায়, এটি মিথ্যা প্রত্যাবর্তন করে। indexOf(..) >= 0এবং includes(..)প্রদত্ত যুক্তি অ্যারেটিতে উপস্থিত থাকলে উভয়ই সত্য হয়।


48

6
অ্যারে.প্রোটোটাইপ.সোম () অ্যারের প্রতিটি উপাদান একটি পরীক্ষা ফাংশনের বিরুদ্ধে পরীক্ষা করে এবং trueঅ্যারের কোনও উপাদান পরীক্ষার ফাংশনটি পাস করলে ফিরে আসে returns অন্যথায়, এটি ফিরে আসে false
হেন্ডেকা

2
এটি সঠিক উত্তর হওয়া উচিত! ES6 ব্যবহার করে দুর্দান্ত এক
Nacho

1
এটা কি আশা করা যায় যে আমার ফলাফলটি [false, false, false]খালি অ্যারের পরিবর্তে হবে []?
ব্যাটম্যান

@ ব্যাটম্যান: ফলাফলটি সত্য / মিথ্যা, তবে আপনি মিঃ আকাশচুম্বী থেকে সমাধানটি মানিয়ে নিতে পারেন
0zkr PM

230

ভ্যানিলা জেএস

/**
 * @description determine if an array contains one or more items from another array.
 * @param {array} haystack the array to search.
 * @param {array} arr the array providing items to check for in the haystack.
 * @return {boolean} true|false if haystack contains at least one item from arr.
 */
var findOne = function (haystack, arr) {
    return arr.some(function (v) {
        return haystack.indexOf(v) >= 0;
    });
};

10
চমৎকার সমাধান! some()রেড হয়। কিছু মিলার সাথে সাথেই চলে যায়।
অ্যাভেরিদেব

6
ইভেন্টটি এর মতো সুন্দর:arr.some(v=> haystack.indexOf(v) >= 0)
পল গ্রিমশা

85
ES2016 arr.some(v => haystack.includes(v))
এও

5
এক লাইনে arr1.some(v => arr2.indexOf(v) >= 0)
ওয়েবজয়

1
আপাতত, ব্যবহার না করা সবচেয়ে ভাল হতে পারে includes, স্পষ্টতই এটি আই-তে সমর্থিত নয়: স্ট্যাকওভারফ্লো
শফিক জামাল ২

72

আপনি যদি কোনও লাইব্রে ব্যবহারের বিরোধী না হন তবে http://underscorejs.org/ এর একটি ছেদ পদ্ধতি রয়েছে যা এটি সহজতর করতে পারে:

var _ = require('underscore');

var target = [ 'apple', 'orange', 'banana'];
var fruit2 = [ 'apple', 'orange', 'mango'];
var fruit3 = [ 'mango', 'lemon', 'pineapple'];
var fruit4 = [ 'orange', 'lemon', 'grapes'];

console.log(_.intersection(target, fruit2)); //returns [apple, orange]
console.log(_.intersection(target, fruit3)); //returns []
console.log(_.intersection(target, fruit4)); //returns [orange]

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


3
আমি এটি বেশ কয়েকবার ব্যবহার করেছি, তবে মনে রাখবেন যে প্রশ্নটি অন্য চৌকোটিতে কোনও উপাদান উপস্থিত রয়েছে কিনা তা পুরো চৌরাস্তাটি তৈরি করার জন্য নয় কিনা তা পরীক্ষা করার বিষয়ে ছিল was পারফরম্যান্সের ক্ষেত্রে যদি অ্যারেগুলি বড় হয় তবে একটি বড় মিল রয়েছে কারণ প্রথম ক্ষেত্রে আপনি একটি ম্যাচ খুঁজে পাওয়ার সাথে সাথে জামিন দিতে পারবেন।
JHH

1
লোডাশ অনেক বেশি পঠনযোগ্য তবে ভ্যানিলা জাভাস্ক্রিপ্ট, রমদা তে লাইব সবসময় ভ্যানিলা ইমহোর পরিবর্তে ব্যবহার করা উচিত। সব দেবের পক্ষে ভাল ...
লিওন গাবান

52

ES6 (দ্রুততম)

const a = ['a', 'b', 'c'];
const b = ['c', 'a', 'd'];
a.some(v=> b.indexOf(v) !== -1)

ES2016

const a = ['a', 'b', 'c'];
const b = ['c', 'a', 'd'];
a.some(v => b.includes(v));

আন্ডারস্কোর

const a = ['a', 'b', 'c'];
const b = ['c', 'a', 'd'];
_.intersection(a, b)

ডেমো: https://jsfiddle.net/r257wuv5/

jsPerf: https://jsperf.com/array-contains-any-element-of-another-array


1
এটি সবচেয়ে সহজ এবং ঘোষণামূলক সমাধান
স্ট্রাইডার

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

জেস্পারফ লিঙ্কটি ভাঙা হয়েছে
ডার্কব্লেজার

সময় এবং স্থান জটিলতায় কি কোনও পার্থক্য রয়েছে? জটিলতা সম্পর্কে সেরা সমাধান কি হবে?
নাচো

41

আপনার যদি ধরণের জবরদস্তি (ব্যবহারের কারণে indexOf) না প্রয়োজন হয় তবে আপনি নীচের মতো কিছু চেষ্টা করতে পারেন:

var arr = [1, 2, 3];
var check = [3, 4];

var found = false;
for (var i = 0; i < check.length; i++) {
    if (arr.indexOf(check[i]) > -1) {
        found = true;
        break;
    }
}
console.log(found);

যেখানে arrলক্ষ্য আইটেম রয়েছে। শেষের দিকে, foundদ্বিতীয় অ্যারেটিতে লক্ষ্যটির বিরুদ্ধে কমপক্ষে একটি ম্যাচ ছিল কিনা তা দেখাবে ।

অবশ্যই, আপনি যে কোনও কিছু ব্যবহার করতে চান তার জন্য সংখ্যাগুলি সরিয়ে নিতে পারেন - আপনার উদাহরণের মতো স্ট্রিংগুলি ভাল।

এবং আমার নির্দিষ্ট উদাহরণে, ফলাফলটি হওয়া উচিত trueকারণ দ্বিতীয় অ্যারের 3লক্ষ্যমাত্রায় উপস্থিত রয়েছে।


হালনাগাদ:

এখানে আমি কীভাবে এটি কোনও ফাংশনে সংগঠিত করব (আগে থেকে কিছু ছোট পরিবর্তন সহ):

var anyMatchInArray = (function () {
    "use strict";

    var targetArray, func;

    targetArray = ["apple", "banana", "orange"];
    func = function (checkerArray) {
        var found = false;
        for (var i = 0, j = checkerArray.length; !found && i < j; i++) {
            if (targetArray.indexOf(checkerArray[i]) > -1) {
                found = true;
            }
        }
        return found;
    };

    return func;
}());

ডেমো: http://jsfiddle.net/u8Bzt/

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


UPDATE2:

যদিও আমার উপরের সমাধানটি কার্যকর হতে পারে এবং (আশাকরি আরও বেশি) পঠনযোগ্য হতে পারে, আমি বিশ্বাস করি যে আমি বর্ণিত ধারণাটি পরিচালনা করার "আরও ভাল" উপায়টি কিছুটা ভিন্নভাবে করা। উপরের সমাধানটির সাথে "সমস্যা" হ'ল indexOfলুপের অভ্যন্তরে লক্ষ্য অ্যারেটিকে অন্য অ্যারের প্রতিটি আইটেমের জন্য সম্পূর্ণ লুপ করা হয়। এটি "অনুসন্ধান" (একটি মানচিত্র ... একটি জাভাস্ক্রিপ্ট অবজেক্ট আক্ষরিক) ব্যবহার করে সহজেই "স্থির" হতে পারে। এটি প্রতিটি অ্যারের উপরে দুটি সাধারণ লুপগুলিকে অনুমতি দেয়। এখানে একটি উদাহরণ:

var anyMatchInArray = function (target, toMatch) {
    "use strict";

    var found, targetMap, i, j, cur;

    found = false;
    targetMap = {};

    // Put all values in the `target` array into a map, where
    //  the keys are the values from the array
    for (i = 0, j = target.length; i < j; i++) {
        cur = target[i];
        targetMap[cur] = true;
    }

    // Loop over all items in the `toMatch` array and see if any of
    //  their values are in the map from before
    for (i = 0, j = toMatch.length; !found && (i < j); i++) {
        cur = toMatch[i];
        found = !!targetMap[cur];
        // If found, `targetMap[cur]` will return true, otherwise it
        //  will return `undefined`...that's what the `!!` is for
    }

    return found;
};

ডেমো: http://jsfiddle.net/5Lv9v/

এই সমাধানের ক্ষতিটি হ'ল কেবল সংখ্যা এবং স্ট্রিং (এবং বুলিয়ানস) ব্যবহার করা যেতে পারে (সঠিকভাবে), কারণ মানগুলি (স্পষ্টতই) স্ট্রেনে রূপান্তরিত হয় এবং অনুসন্ধান মানচিত্রের কী হিসাবে সেট করা হয় set এটি হ'ল অক্ষরগত মানগুলির জন্য খুব ভাল / সম্ভাব্য / সহজেই করা যায় না।


2
দুর্দান্ত উদাহরণ, দ্বিতীয় উদাহরণটি কেবল উজ্জ্বল।
সোরিন হাইডাউ

আপনি কিছু বা ফাইন্ড ইন্ডেক্স ব্যবহার করতে পারলে আপনি লুপগুলির জন্য কেন ব্যবহার করছেন?
এটি আমি ... অ্যালেক্স

1
"কিছু" কোডটি ব্যাপকভাবে সরল করে। এছাড়াও, যে কোনও ম্যাচইনআররে ([1,2,3, "বিড়াল", "4"], ["1", 4]) সত্য হবে। শেষ অবধি, এটি যদি আরও বেশি পারফরম্যান্ট হয়ে থাকে তবে আপনি যদি বিপুল সংখ্যক লুকআপ পেয়ে থাকেন এবং টার্গেটম্যাপটি ক্যাশে করে থাকেন। তবুও, সম্ভবত কর্মক্ষমতা বৃদ্ধি হতে পারে। উদাহরণস্বরূপ, আমি অনুমান করব যে "পাওয়া = টু ম্যাচ [i]! == অপরিজ্ঞাত" আরও পারফরম্যান্ট হবে এবং কিছু ক্ষেত্রে আরও ভাল (যাতে আপনি "" বা 0 থেকে মিথ্যা মূল্যায়ন করেন না)
csga5000

"অন্যথায় এটি ফিরে আসবে undefined... এটাই তার !!জন্য" - এটি ভুল। এটি এর বুলিয়ান বিরোধীতা ফিরিয়ে দেবে !
এলিয়েন ওয়েবেগুই

41

ES6 সমাধান:

let arr1 = [1, 2, 3];
let arr2 = [2, 3];

let isFounded = arr1.some( ai => arr2.includes(ai) );

এর বিপরীতে: সমস্ত মান থাকতে হবে।

let allFounded = arr2.every( ai => arr1.includes(ai) );

আশা করি, সহায়ক হবে।


কোনো উপায় আছে সূচী পেতে হয় arra2 থেকে মানগুলি বিন্যাস 1 ??
আনজিল খাঁ

1
সেক্ষেত্রে আমরা "কিছু" এর পরিবর্তে "ফিল্টার" ব্যবহার করতে পারি। তারপরে এটি বুলিয়ানের পরিবর্তে একটি অ্যারে ফিরিয়ে দেবে এবং আপনি সেখান থেকে সহজেই মানটি অ্যাক্সেস করতে পারবেন।
tanvir993

29

আপনি লোডাশ ব্যবহার করতে এবং করতে পারেন:

_.intersection(originalTarget, arrayToCheck).length > 0

উভয় সংকলনে অভিন্ন উপাদানগুলির অ্যারে তৈরি করে সেট ছেদ করা হয়।


পারফরম্যান্সের দিক থেকে এটি সর্বোত্তম নয়, যেহেতু এই সমস্যার জন্য এটি প্রথম ম্যাচটি সন্ধান করা যথেষ্ট, যখন এটির intersectionসন্ধানের জন্য প্রথম ম্যাচ সন্ধান করার পরেও তুলনা করতে থাকবে। filterআপনার যখন প্রয়োজন হবে তখন এটি ব্যবহার করার মতো find
আলেকজান্ডার

29

ফিল্টার / সূচিপত্র ব্যবহার :

function containsAny(source,target)
{
    var result = source.filter(function(item){ return target.indexOf(item) > -1});   
    return (result.length > 0);  
}    


//results

var fruits = ["apple","banana","orange"];


console.log(containsAny(fruits,["apple","grape"]));

console.log(containsAny(fruits,["apple","banana","pineapple"]));

console.log(containsAny(fruits,["grape", "pineapple"]));


এটি লাইব্রেরির ক্রিয়াকলাপের মতো একই সমস্যায় ভুগছে যেমন _.interication যে এটি খুঁজে পাওয়ার পরেও ম্যাচগুলি সন্ধান করতে থাকবে। ছোট অ্যারেগুলির জন্য অবশ্যই এটি গুরুত্বপূর্ণ নয়।
JHH

12
const areCommonElements = (arr1, arr2) => {
    const arr2Set = new Set(arr2);
    return arr1.some(el => arr2Set.has(el));
};

অথবা যদি আপনি প্রথমটি আবিষ্কার করেন যে এই দুটি অ্যারেগুলির মধ্যে কোনটি দীর্ঘতর এবং Setসবচেয়ে দীর্ঘতম অ্যারে তৈরি করছে, তবে someসবচেয়ে কম পদ্ধতিতে পদ্ধতি প্রয়োগ করার সময় :

const areCommonElements = (arr1, arr2) => {
    const [shortArr, longArr] = (arr1.length < arr2.length) ? [arr1, arr2] : [arr2, arr1];
    const longArrSet = new Set(longArr);
    return shortArr.some(el => longArrSet.has(el));
};

3
লোকেরা বাসা বেঁধে সমাধান পোস্ট করার সময় indexOfএবং includes, আপনি Setএকাইস্ক্রিপ্টে প্রবর্তনের 4 বছর পরে নেটিভ ব্যবহার করে আরও দক্ষ সেট-ভিত্তিক সমাধান দিয়ে উত্তর দেওয়ার ক্ষেত্রে প্রথম হন । +1
ট্রাইঙ্কট

9

দুটি অ্যারের মধ্যে সমস্ত বা কিছু উপাদান মিলে এই সংক্ষিপ্ত এবং মিষ্টি সিনট্যাক্সটি পেয়েছি। উদাহরণ স্বরূপ

// অথবা অপারেশন। অ্যারে 1 তে অ্যারে 2 উপাদানগুলির কোনও উপস্থিত রয়েছে কিনা তা সন্ধান করুন। যখন প্রথম ম্যাচ হবে তেমনি ফাংশনটি সত্য ফেরত যখন কিছু পদ্ধতি বিরতিতে আসবে তখনই এটি ফিরে আসবে

let array1 = ['a', 'b', 'c', 'd', 'e'], array2 = ['a', 'b'];

console.log(array2.some(ele => array1.includes(ele)));

// সত্য মুদ্রণ

// এবং অপারেশন। অ্যারে 1 তে অ্যারে 2 উপাদানগুলির সমস্ত উপস্থিত আছে কিনা তা সন্ধান করুন। কোনও প্রথম ম্যাচ না হওয়ার সাথে সাথে ফাংশনটি সত্য প্রদান করে কিছু পদ্ধতি বিরতিতে এটি ফিরে আসবে

let array1 = ['a', 'b', 'c', 'd', 'e'], array2 = ['a', 'x'];

console.log(!array2.some(ele => !array1.includes(ele)));

// প্রিন্টস জাল

আশা করি ভবিষ্যতে কাউকে সাহায্য করবে!


আমি ইএস 5 এর জন্য কাজ করার জন্য প্রশ্নের দ্বিতীয় অংশটি সত্যিই পছন্দ করেছি, এটি কি পছন্দ করেছে:! অ্যারে 2.some (ফাংশন (এগারো) {রিটার্ন অ্যারে 1.indexOf (এগার) === -1});
ফ্রিজগার্ড

6

আপনি নেস্টেড অ্যারে.প্রোটোটাইপ.সোম কলটি ব্যবহার করতে পারেন। এটির সুবিধাটি রয়েছে যে এটি সম্পূর্ণ মিলিত লুপের মধ্য দিয়ে চলে এমন অন্যান্য সমাধানের পরিবর্তে প্রথম ম্যাচে জামিন দেবে।

যেমন।

var arr = [1, 2, 3];
var match = [2, 4];

var hasMatch = arr.some(a => match.some(m => a === m));

4

এখানে একটি আকর্ষণীয় ঘটনা আমি ভেবেছিলাম আমার ভাগ করা উচিত।

ধরা যাক যে আপনার কাছে অবজেক্টগুলির একটি অ্যারে এবং নির্বাচিত ফিল্টারগুলির একটি অ্যারে রয়েছে।

let arr = [
  { id: 'x', tags: ['foo'] },
  { id: 'y', tags: ['foo', 'bar'] },
  { id: 'z', tags: ['baz'] }
];

const filters = ['foo'];

এই কাঠামোর জন্য নির্বাচিত ফিল্টারগুলি প্রয়োগ করতে আমরা পারি

if (filters.length > 0)
  arr = arr.filter(obj =>
    obj.tags.some(tag => filters.includes(tag))
  );

// [
//   { id: 'x', tags: ['foo'] },
//   { id: 'y', tags: ['foo', 'bar'] }
// ]

4

আমি 3 টি সমাধান লিখেছি। মূলত তারাও একই কাজ করে। তারা পেয়ে গেলেই সত্য ফিরে আসে true। আমি জিনিসগুলি 3 টি ভিন্ন উপায়ে দেখানোর জন্য 3 টি সমাধান লিখেছি। এখন, এটি আপনাকে কী বেশি পছন্দ করে তা নির্ভর করে। আপনি একটি সমাধান বা অন্যটির কার্যকারিতা যাচাই করতে পারফরম্যান্স.নেউ () ব্যবহার করতে পারেন । আমার সমাধানগুলিতে আমি যাচাই করছি যে কোন অ্যারেটি সবচেয়ে বড় এবং কোনটি সবচেয়ে কম অপারেশনগুলিকে দক্ষ করতে সবচেয়ে ছোট lest

তৃতীয় সমাধানটি খুব সুন্দর না হলেও দক্ষ। আমি এটি যুক্ত করার সিদ্ধান্ত নিয়েছি কারণ কিছু কোডিং সাক্ষাত্কারে আপনাকে অন্তর্নির্মিত পদ্ধতিগুলি ব্যবহার করার অনুমতি নেই।

শেষ অবধি, অবশ্যই ... আমরা লুপগুলির জন্য 2 নিস্টেড (ব্রুট ফোর্স ওয়ে) সহ একটি সমাধান নিয়ে আসতে পারি তবে আপনি তা এড়াতে চান কারণ সময় জটিলতা খারাপ হে (এন ^ 2)

বিঃদ্রঃ:

.includes()অন্য কিছু লোকের মতো ব্যবহারের পরিবর্তে আপনি ব্যবহার করতে পারেন .indexOf()। আপনি যদি 0 টির চেয়ে বড় হয় কিনা তা পরীক্ষা করে দেখুন মানটি না থাকলে আপনাকে -1 দেয় give যদি এটি বিদ্যমান থাকে তবে এটি আপনাকে 0 এর চেয়ে বেশি দেবে।

ইনডেক্সফ () বনাম অন্তর্ভুক্ত ()

কোনটি ভাল পারফরম্যান্স আছে ?indexOf()কিছুটা হলেও, তবে আমার মতে এটি আরও পাঠযোগ্য includes

যদি আমি ভুল না হয়ে থাকি .includes()এবং indexOf()দৃশ্যের পিছনে লুপগুলি ব্যবহার করি, সুতরাং সেগুলি ব্যবহার করার সময় আপনি ও (এন ^ 2) এ থাকবেন.some()

লুপ ব্যবহার করা হচ্ছে

 const compareArraysWithIncludes = (arr1, arr2) => {
     const [smallArray, bigArray] =
        arr1.length < arr2.length ? [arr1, arr2] : [arr2, arr1];

     for (let i = 0; i < smallArray.length; i++) {
       return bigArray.includes(smallArray[i]);
     }

      return false;
    };

ব্যবহার করা হচ্ছে কিছু ()

const compareArraysWithSome = (arr1, arr2) => {
  const [smallArray, bigArray] =
    arr1.length < arr2.length ? [arr1, arr2] : [arr2, arr1];
  return smallArray.some(c => bigArray.includes(c));
};

মানচিত্রের ব্যবহারের সময় জটিলতা হে (2 এন) => ও (এন)

const compararArraysUsingObjs = (arr1, arr2) => {
  const map = {};

  const [smallArray, bigArray] =
    arr1.length < arr2.length ? [arr1, arr2] : [arr2, arr1];

  for (let i = 0; i < smallArray.length; i++) {
    if (!map[smallArray[i]]) {
      map[smallArray[i]] = true;
    }
  }

  for (let i = 0; i < bigArray.length; i++) {
    if (map[bigArray[i]]) {
      return true;
    }
  }

  return false;
};

আমার কোড: স্ট্যাকব্লিটজ

আমি পারফরম্যান্সে বিশেষজ্ঞ বা বিগও নই তাই আমি যা বলেছিলাম তা যদি ভুল হয় তবে আমাকে জানান।


3

কিছু / FindIndex এবং indexOf এর সংমিশ্রণটি ব্যবহার সম্পর্কে কী?

সুতরাং এর মতো কিছু:

var array1 = ["apple","banana","orange"];
var array2 = ["grape", "pineapple"];

var found = array1.some(function(v) { return array2.indexOf(v) != -1; });

এটিকে আরও পঠনযোগ্য করার জন্য আপনি এই ক্রিয়াটি অ্যারে অবজেক্টে যুক্ত করতে পারেন।

Array.prototype.indexOfAny = function (array) {
    return this.findIndex(function(v) { return array.indexOf(v) != -1; });
}

Array.prototype.containsAny = function (array) {
    return this.indexOfAny(array) != -1;
}

দ্রষ্টব্য: আপনি যদি কোনও প্রিকিটিকের সাথে কিছু করতে চান তবে আপনি অভ্যন্তরীণ সূচিপত্রটিকে অন্য ফাইন্ড ইন্ডেক্স এবং একটি শিকারের সাথে প্রতিস্থাপন করতে পারেন


3

আমার দ্রষ্টব্য অ্যারে.প্রোটোটাইপ.সোম () এবং অ্যারে.প্রোটোটাইপ.মিনে অন্তর্ভুক্ত () অ্যারে যা তাদের বেশ দক্ষ করে

ES6

const originalFruits = ["apple","banana","orange"];

const fruits1 = ["apple","banana","pineapple"];

const fruits2 = ["grape", "pineapple"];

const commonFruits = (myFruitsArr, otherFruitsArr) => {
  return myFruitsArr.some(fruit => otherFruitsArr.includes(fruit))
}
console.log(commonFruits(originalFruits, fruits1)) //returns true;
console.log(commonFruits(originalFruits, fruits2)) //returns false;


আসল ফলের আইটেমগুলি অন্তর্ভুক্ত করার সূচক পাওয়ার কোনও উপায় আছে কি ??
আনজিল খাঁ

3

আরও একটি সমাধান

var a1 = [1, 2, 3, 4, 5]
var a2 = [2, 4]

A1 এ 2 এর সমস্ত উপাদান রয়েছে কিনা তা পরীক্ষা করুন

var result = a1.filter(e => a2.indexOf(e) !== -1).length === a2.length
console.log(result)

2

এটি কেবল প্রধান অ্যারে জুড়ে পুনরুক্তি করে এবং অন্যান্য অ্যারেতে লক্ষ্য উপাদানগুলির মধ্যে কোনও রয়েছে কিনা তা পরীক্ষা করে দেখা যায়।

এটা চেষ্টা কর:

function Check(A) {
    var myarr = ["apple", "banana", "orange"];
    var i, j;
    var totalmatches = 0;
    for (i = 0; i < myarr.length; i++) {
        for (j = 0; j < A.length; ++j) {
            if (myarr[i] == A[j]) {

                totalmatches++;

            }

        }
    }
    if (totalmatches > 0) {
        return true;
    } else {
        return false;
    }
}
var fruits1 = new Array("apple", "grape");
alert(Check(fruits1));

var fruits2 = new Array("apple", "banana", "pineapple");
alert(Check(fruits2));

var fruits3 = new Array("grape", "pineapple");
alert(Check(fruits3));

JSFIDDLE এ ডেমো


2

সঙ্গে underscorejs

var a1 = [1,2,3];
var a2 = [1,2];

_.every(a1, function(e){ return _.include(a2, e); } ); //=> false
_.every(a2, function(e){ return _.include(a1, e); } ); //=> true

2
ব্যক্তিগতভাবে, যদিও আমি আন্ডারস্কোর পছন্দ করি, এটি বিভক্ত কোডটি কীভাবে দেখতে পারে তার একটি সর্বোত্তম উদাহরণ। আন্ডারস্কোর কোড হিসাবে উপলব্ধি করা কেবল কঠিনই নয়, তবে সাধারণ কোডিং দৃষ্টিকোণ থেকে একই জিনিসটিও সত্য (উদাহরণস্বরূপ "প্রত্যেক" শব্দটি মনে হয় না যখন আমি কোনও অ্যারেতে কোনও সূচক খুঁজতে চাইছি তবে "indexOf" করেন)। আমাদের তৃতীয় পক্ষের সরঞ্জামগুলির অপ্রয়োজনীয় ব্যবহার এড়ানো উচিত যখন অতিরিক্ত কয়েকটি অক্ষরের জন্য, একটি খাঁটি জাভাস্ক্রিপ্ট সমাধান সরবরাহ করা যেতে পারে। এর জন্য আন্ডারস্কোর ব্যবহার করার অর্থ আপনার সমাধানটি তৃতীয় পক্ষের কোডের সাথে শক্তভাবে মিলিত হয়।
csharpfirevermore

@csharpforevermore আমি অনুমান এই স্বাদ ব্যাপার, আপনি বলতে এই সমাধান বেশি সংবর্ত ব্যবহার করে অন্যদের সব চেয়ে indexOfআমি বিপরীত :) মনে করি। অন্যদিকে আমি যদি বাহ্যিক গ্রন্থাগারগুলির সত্যিকারের প্রয়োজন না হয় তবে তিনি যুক্ত না করার চেষ্টা করতে সম্মত হন, তবে আমি এটির সাথে সত্যই আগ্রহী নই, তৃতীয়-অংশের লাইব্রেরিগুলি কেবল দরকারী কার্যকরীতা নয়, দৃ solid় কার্যকারিতাও সরবরাহ করে। উদাহরণস্বরূপ: আপনি কি নিজের সমাধান সহ সমস্ত প্রান্তের কেস এবং মেয়র-ব্রাউজারগুলি পরীক্ষা করেছেন? .. (উপায় দ্বারা, everyতালিকায় কোনও সূচী খোঁজার চেষ্টা করছে না তবে তালিকার প্রতিটি উপাদানগুলির কিছু মূল্যায়ন করছে)
ফিউগিলেন

2

অ্যারে প্রোটোটাইপে যুক্ত করা হচ্ছে

দাবি অস্বীকার: অনেকে এর বিরুদ্ধে কঠোরভাবে পরামর্শ দেবেন। কেবলমাত্র তখনই সমস্যা হতে পারে যদি কোনও লাইব্রেরি একই নামের (যেটি আলাদাভাবে আচরণ করে) বা এরকম কিছু দিয়ে একটি প্রোটোটাইপ ফাংশন যুক্ত করে।

কোড:

Array.prototype.containsAny = function(arr) {
    return this.some(
        (v) => (arr.indexOf(v) >= 0)
    )
}

বড় তীর ফাংশন ব্যবহার না করে:

Array.prototype.containsAny = function(arr) {
    return this.some(function (v) {
        return arr.indexOf(v) >= 0
    })
}

ব্যবহার

var a = ["a","b"]

console.log(a.containsAny(["b","z"]))    // Outputs true

console.log(a.containsAny(["z"]))    // Outputs false

2

আংশিক মিল এবং কেস সংবেদনশীল সহ ভ্যানিলা জেএস

কিছু পূর্ববর্তী পদ্ধতির সাথে সমস্যাটি হ'ল তাদের প্রতিটি শব্দের সাথে সঠিক মিলের প্রয়োজন । তবে, আপনি যদি আংশিক ম্যাচের জন্য ফলাফল সরবরাহ করতে চান?

function search(arrayToSearch, wordsToSearch) {
    arrayToSearch.filter(v => 
        wordsToSearch.every(w => 
            v.toLowerCase().split(" ").
                reduce((isIn, h) => isIn || String(h).indexOf(w) >= 0, false)
            )
        )
}
//Usage
var myArray = ["Attach tag", "Attaching tags", "Blah blah blah"];
var searchText = "Tag attach";
var searchArr = searchText.toLowerCase().split(" "); //["tag", "attach"]

var matches = search(myArray, searchArr);
//Will return
//["Attach tag", "Attaching tags"]

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


2

@ পল গ্রিমশো উত্তরটি আপডেট করুন, আরও পঠনযোগ্যের জন্য includesঅন্তরুক্ত ব্যবহার করুনindexOf

পাওয়া যাক = arr1.some (r => arr2.indexOf (r)> = 0)
পাওয়া যাক = arr1.some (r => arr2.includes (r))


1

আমি নোডে এর মতো আন্ডারস্কোর জেএস ব্যবহার করে একটি সমাধান নিয়ে এসেছি:

var checkRole = _.intersection(['A','B'], ['A','B','C']);
if(!_.isEmpty(checkRole)) { 
     next();
}

0

ব্যক্তিগতভাবে, আমি নিম্নলিখিত ফাংশনটি ব্যবহার করব:

var arrayContains = function(array, toMatch) {
    var arrayAsString = array.toString();
    return (arrayAsString.indexOf(','+toMatch+',') >-1);
}

"ToString ()" পদ্ধতিটি সর্বদা মানগুলি পৃথক করতে কমা ব্যবহার করবে। সত্যই আদিম ধরণের সাথে কাজ করবে।


2
উপাদানগুলির শুরুতে বা অ্যারের শেষে বা অন্য কোনও ক্রমে যখন এটি কাজ করবে না।
ড্যানিয়েল

1
-1 কারণ ড্যানিয়েলএম যেমন বলেছিলেন এটি ভেঙে গেছে। আপনি পারে পূর্বে লিখুন এবং কার্যসংক্রান্ত হিসাবে arrayAsString করার জন্য একটি কমা যোগ, কিন্তু সত্যি বলতে এটা শুধু ব্যবহার স্ট্রিং একটি মাত্রাতিরিক্ত জটিল সমাধান মত মনে হয়।
JHH

0

অ্যারে .ফিল্টার () .find () এ নেস্টেড কল সহ দ্বিতীয় অ্যারের সদস্য যারা প্রথম অ্যারেতে সমস্ত উপাদান ফেরত দেবে। দ্বিতীয় অ্যারেগুলির মধ্যে প্রথম অ্যারে ছিল কিনা তা নির্ধারণ করতে ফিরে আসা অ্যারের দৈর্ঘ্য পরীক্ষা করুন Check

getCommonItems(firstArray, secondArray) {
  return firstArray.filter((firstArrayItem) => {
    return secondArray.find((secondArrayItem) => {
      return firstArrayItem === secondArrayItem;
    });
  });
}

অ্যারে "পরিষ্কার" করার কোনও উপায় আছে কি? দ্বিতীয় অ্যারেতে মানগুলি মুছে ফেলার মতো যদি তারা প্রথমটিতে থাকে?
সান্দ্রোকো

0
console.log("searching Array: "+finding_array);
console.log("searching in:"+reference_array);
var check_match_counter = 0;
for (var j = finding_array.length - 1; j >= 0; j--) 
{
    if(reference_array.indexOf(finding_array[j]) > 0)
    {
        check_match_counter = check_match_counter + 1;
    }
}
 var match = (check_match_counter > 0) ? true : false;
console.log("Final result:"+match);

0
var target = ["apple","banana","orange"];
var checkArray = ["apple","banana","pineapple"];

var containsOneCommonItem = target.some(x => checkArray.some(y => y === x));`

["apple","grape"] //returns true;

["apple","banana","pineapple"] //returns true;

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