দুটি অ্যারে একই মান রয়েছে কিনা তা কীভাবে জানবেন


104

আমার এই দুটি অ্যারে রয়েছে: একটি এজ্যাক্স অনুরোধ থেকে প্রাপ্ত তথ্যে পূর্ণ এবং অন্যটিতে ব্যবহারকারীরা ক্লিক করা বোতামগুলি সঞ্চয় করে। আমি এই কোডটি ব্যবহার করি (আমি নমুনা নম্বর দিয়ে ভরা)

var array1 = [2, 4];
var array2 = [4, 2]; //It cames from the user button clicks, so it might be disordered.
array1.sort(); //Sorts both Ajax and user info.
array2.sort();
if (array1==array2) {
    doSomething();
}else{
    doAnotherThing();
}

তবে এটি সর্বদা দেয় false, যদিও দুটি অ্যারে একই হয় তবে আলাদা নামের সাথে। (আমি এটি ক্রোমের জেএস কনসোলটিতে পরীক্ষা করেছি)। সুতরাং, কোনও উপায় আছে কি আমি জানতে পারি যদি এই দুটি অ্যারে একই থাকে? দিচ্ছে কেন false? প্রথম অ্যারেতে কোন মানগুলি দ্বিতীয়টিতে নেই তা আমি কীভাবে জানতে পারি?


1
আমি বেশ নিশ্চিত যে আপনাকে অ্যারের প্রতিটি উপাদান দিয়ে যেতে হবে।
থমাস লি

তুমি জানো কেন এটি মিথ্যা ফেরত দেয়? অদ্ভুত।
রবডাব্লু

@Andrew এর দেখুন উত্তর stackoverflow.com/a/6229263/702565
কার্লোস Precioso

উত্তর:


36
function arraysEqual(_arr1, _arr2) {

    if (!Array.isArray(_arr1) || ! Array.isArray(_arr2) || _arr1.length !== _arr2.length)
      return false;

    var arr1 = _arr1.concat().sort();
    var arr2 = _arr2.concat().sort();

    for (var i = 0; i < arr1.length; i++) {

        if (arr1[i] !== arr2[i])
            return false;

    }

    return true;

}

নোট করুন যে এটি পূর্বের উত্তরের মতো মূল অ্যারেগুলিকে পরিবর্তন করে না।


2
বাছাইয়ের জন্য এনলগ (এন) সময় লাগে। আপনার বাছাই করার দরকার নেই। এই উত্তর স্ট্যাকওভারফ্লো.com/a/55614659/3209523 রৈখিক সময়ে কাজ করে।
ক্যানব্যাক্স

অ্যারে.আইসআর্রে () টাইপস্ক্রিপ্ট ব্যবহার করে ত্রুটি ঘটছিল, এটি কার্যকর হয়েছে তা সরিয়ে ফেলে।
এরিয়েল ফ্রিচার

88

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

var array1= [10, 6, 19, 16, 14, 15, 2, 9, 5, 3, 4, 13, 8, 7, 1, 12, 18, 11, 20, 17];
var array2= [12, 18, 20, 11, 19, 14, 6, 7, 8, 16, 9, 3, 1, 13, 5, 4, 15, 10, 2, 17];

if(array1.sort().join(',')=== array2.sort().join(',')){
    alert('same members');
}
else alert('not a match');

2
এটি আদিম বা অবজেক্টগুলির জন্য ভালভাবে কাজ করবে যেগুলি স্ট্রিংয়ের মানগুলি অনন্যভাবে সনাক্ত করতে পারে তবে কেবল কোনও বস্তুর জন্য নয়।
ডিভাইস 1

ধন্যবাদ! ঝরঝরে সমাধান
গ্যাস্টন সানচেজ

3
নাল আইটেম এবং বাছাই থেকে সাবধান। আমি ", 2,2,3" এবং "2,2,3," এর মতো তুলনা করার জন্য স্ট্রিং দিয়ে শেষ করেছি যা অবশ্যই কঠোরভাবে সমান নয়।
বারবারা.পস্ট

2
স্ট্রিংগুলির জন্য ব্যর্থ হতে পারে, ['a', 'b']এবং ['a,b']। আমি কেবল ছোট থ্রোওয়ে স্ক্রিপ্টগুলির জন্য এই কৌশলটি সুপারিশ করব।
অ্যালেক্স

1
@ অ্যালেক্স - আমার ক্ষেত্রে, কমাগুলিকে স্ট্রিংয়ে অনুমতি দেওয়া হয় তবে আধা কোলন নেই, তাই আমি ব্যবহার করেছি ';' কমা পরিবর্তে যোগদানের জন্য
2345 19

45

যদি আপনি কেবল দুটি অ্যারে একই মান (প্রতিটি মানের সংখ্যার সংখ্যা এবং ক্রম নির্বিশেষে) থাকে তবে আপনি লড্যাশ ব্যবহার করে এটি করতে পারেন তা পরীক্ষা করতে চান :

_.isEmpty(_.xor(array1, array2))

সংক্ষিপ্ত, সহজ এবং সুন্দর!


1
আমি xorআন্ডারস্কোর ডক্সে খুঁজে পাচ্ছি না? আপনি কি আইওড্যাশের কথা ভাবছেন?
প্যাট্রিক মেনসিয়াস লুইস

44
Array.prototype.compare = function(testArr) {
    if (this.length != testArr.length) return false;
    for (var i = 0; i < testArr.length; i++) {
        if (this[i].compare) { //To test values in nested arrays
            if (!this[i].compare(testArr[i])) return false;
        }
        else if (this[i] !== testArr[i]) return false;
    }
    return true;
}

var array1 = [2, 4];
var array2 = [4, 2];
if(array1.sort().compare(array2.sort())) {
    doSomething();
} else {
    doAnotherThing();
}

হতে পারে?


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

[2,4] [4,2] এর জন্য মিথ্যা।
সুরজ খানাল

@ সুরজ খানাল এখনও বাছাই করা দরকার
অ্যারন ম্যাকমিলিন

26

কেন আপনার কোড কাজ করে না

জাভাস্ক্রিপ্টে আদিম ডেটা ধরণের এবং অ-আদিম ডেটা ধরণের রয়েছে।

আদিম ধরনের তথ্য জন্য, ==এবং ===চেক বার উভয় পাশে কিছু মান একই কিনা। এ কারণেই 1 === 1সত্য।

অ্যারেগুলির মতো অ-আদিম উপাত্তের জন্য ==এবং ===রেফারেন্সের সমতার জন্য পরীক্ষা করুন। যে, তারা arr1এবং কিনা তা পরীক্ষা করে দেখুনarr2 একই বস্তু । আপনার উদাহরণে, দুটি অ্যারে একই ক্রমে একই জিনিস রয়েছে তবে সমতুল্য নয়।

সলিউশন

দুটি অ্যারে, arr1এবং arr2, একই সদস্য থাকলে এবং কেবল যদি:

  • যা কিছু আছে arr2তাarr1

এবং

  • যা কিছু আছে arr1তাarr2

সুতরাং এটি কৌশলটি করবে (ES2016):

const containsAll = (arr1, arr2) => 
                arr2.every(arr2Item => arr1.includes(arr2Item))

const sameMembers = (arr1, arr2) => 
                        containsAll(arr1, arr2) && containsAll(arr2, arr1);

sameMembers(arr1, arr2); // `true`

অ্যান্ডস্কোর ব্যবহার করে এই দ্বিতীয় সমাধানটি আপনি যা করার চেষ্টা করছেন তার কাছাকাছি:

arr1.sort();
arr2.sort();

_.isEqual(arr1, arr2); // `true`

এটি isEqual"গভীর সাম্যতা" জন্য পরীক্ষা করে কারণ এর অর্থ এটি কেবলমাত্র রেফারেন্স সাম্যের চেয়ে বেশি দেখায় এবং মানগুলির তুলনা করে।

আপনার তৃতীয় প্রশ্নের একটি সমাধান

আপনি কী কী জিনিস arr1অন্তর্ভুক্ত নেই তা কীভাবে খুঁজে বের করবেন তা জিজ্ঞাসা করেছিলেনarr2

এটি এটি করবে (ES2015):

const arr1 = [1, 2, 3, 4];
const arr2 = [3, 2, 1];

arr1.filter(arr1Item => !arr2.includes(arr1Item)); // `[4]`

আপনি অ্যান্ডস্কোর এর difference: পদ্ধতিটিও ব্যবহার করতে পারেন :

_.difference(arr1, arr2); // `[4]`

হালনাগাদ

@ রেডুর মন্তব্য দেখুন — আমার সমাধানটি এর জন্য sameMembers, তবে আপনার মনে যা থাকতে পারে তা sameMembersInOrder-ও-হিসাবে পরিচিত deepEquals

আপডেট 2

আপনি যদি অ্যারে সদস্যদের ক্রমটির বিষয়ে চিন্তা না করেন তবে ES2015 + এর Setচেয়ে আরও ভাল ডেটা কাঠামো হতে পারে Array। বিপজ্জনক বানর-প্যাচিং বাস্তবায়ন isSupersetএবং কীভাবেdifference ব্যবহার করতে হয় সে সম্পর্কে MDN নোটগুলি দেখুন See


1
আপনার সমাধানগুলি ভুল। "দুটি অ্যারে, অ্যারি 1 এবং এরি 2, একই সদস্য থাকলে এবং কেবল যদি: আর্ট 2-এ সব কিছু এআর 1 এ থাকে এবং আরআর 1-এ থাকা সমস্ত কিছু আর্ট 2 এ থাকে" এটিও ভুল। এটি একটি অ্যারে নয় একটি সেট। সুতরাং sameMembers([1,1,2],[2,1,2]);মিথ্যা ফিরে আসা উচিত।
রেডু

1
@ রেদু অনুমান করেন যে এটি "একই সদস্যদের" এর অর্থের উপর নির্ভর করে — আমি এটির অর্থ গ্রহণ করি "একই সদস্য রয়েছে"। আমার মতে sameMembers([1,1,2],[2,1,2])ফিরে আসা উচিত truesameMembersInOrder([1,1,2],[2,1,2])একে ফেরা deepEquals([1,1,2],[2,1,2])উচিত false
ম্যাক্স হেইবার

আপনার তৃতীয় সমাধানটি arr1.filter...কেবল এটির জন্য কাজ করবে যদি অ্যারে 2 এ আর 1 এর সমস্ত উপাদান থাকে বা না তবে অন্যদিকে যা প্রয়োজন হয় তা নয়।
আকাশ ভার্মা

9

বস্তু সমতা পরীক্ষা:JSON.stringify(array1.sort()) === JSON.stringify(array2.sort())

উপরের পরীক্ষাটি অবজেক্টগুলির অ্যারেগুলির সাথেও কাজ করে যা ক্ষেত্রে http://www.w3schools.com/jsref/jsref_sort.asp এ নথিভুক্ত হিসাবে একটি সাজানোর ফাংশন ব্যবহার করে

ফ্ল্যাট জেএসএন স্কিমার সাহায্যে ছোট অ্যারেগুলির পক্ষে যথেষ্ট।


9

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

/** assumes array elements are primitive types
* check whether 2 arrays are equal sets.
* @param  {} a1 is an array
* @param  {} a2 is an array
*/
function areArraysEqualSets(a1, a2) {
  const superSet = {};
  for (const i of a1) {
    const e = i + typeof i;
    superSet[e] = 1;
  }

  for (const i of a2) {
    const e = i + typeof i;
    if (!superSet[e]) {
      return false;
    }
    superSet[e] = 2;
  }

  for (let e in superSet) {
    if (superSet[e] === 1) {
      return false;
    }
  }

  return true;
}

নোট করুন যে এই ফাংশনটি আদিম ধরণের অ্যারেগুলির সাথে কাজ করে এবং ধরে নেওয়া হয় a1এবং a2অ্যারে হয়।


5

এই সম্পর্কে কি? ES 2017 আমি মনে করি:

const array1 = [1, 3, 5];
const array2 = [1, 5, 3];

const isEqual = (array1.length === array2.length) && (array1.every(val => array2.includes(val)));
console.log(isEqual);

উভয় অ্যারে একই দৈর্ঘ্য রয়েছে এবং ২ য় শর্ত পরীক্ষা করে যদি প্রথম অ্যারে ২ য় অ্যারের উপসেট হয় তবে প্রথম শর্ত পরীক্ষা করে। এই 2 শর্তের সংমিশ্রণের ফলে উপাদানগুলির ক্রম নির্বিশেষে 2 টি অ্যারের সমস্ত আইটেমের তুলনায় ফলাফল পাওয়া উচিত।

উপরের কোডটি কেবল তখনই কাজ করবে যদি উভয় অ্যারেতে নন-সদৃশ আইটেম থাকে।


3

আপনি যখন এই দুটি অ্যারে তুলনা করেন, আপনি বিষয়বস্তু নয়, অ্যারে উপস্থাপন করে এমন বস্তুর তুলনা করছেন।

দুটি তুলনা করতে আপনাকে একটি ফাংশন ব্যবহার করতে হবে। আপনি নিজের লেখা লিখতে পারেন যা কেবল একটিতে লুপ হয়ে যায় এবং দৈর্ঘ্য একই কিনা তা পরীক্ষা করার পরে এটি অন্যটির সাথে তুলনা করে।


3

ES6 ব্যবহার করে অগভীর সমতার জন্য সহজ সমাধান:

const arr1test = arr1.slice().sort()
const arr2test = arr2.slice().sort()
const equal = !arr1test.some((val, idx) => val !== arr2test[idx])

প্রতিটি অ্যারের অগভীর অনুলিপি তৈরি করে এবং সেগুলি সাজায়। তারপরে মানগুলির some()মধ্য দিয়ে লুপ করতে ব্যবহৃত হয় arr1test, প্রতিটি arr2testসূচক একই সূচক সহ মানটির বিপরীতে পরীক্ষা করে । সমস্ত মান সমান হলে, some()প্রত্যাবর্তন হয় falseএবং ঘুরে ফিরে equalমূল্যায়ন করে true

এটি ব্যবহার করতেও পারে every()তবে trueফলাফলটি সন্তুষ্ট করতে অ্যারের প্রতিটি উপাদানকে ঘুরতে some()হবে , যেখানে এটি সমান নয় এমন মান খুঁজে পাওয়ার সাথে সাথে জামিন করবে:

const equal = arr1test.every((val, idx) => val === arr2test[idx])

2

গেম প্রজেক্টে আমার সাধারণ পূর্ণসংখ্যার মান ছিল
প্রতিটি অ্যারেতে কম সংখ্যক মান ছিল, এছাড়াও, সেই মূল অ্যারেটি আউটচুড হওয়া দরকার
, সুতরাং আমি নীচেরটি করেছিলাম, এটি ভাল কাজ করেছে worked (কোড এখানে আটকানোর জন্য সম্পাদিত)

var sourceArray = [1, 2, 3];
var targetArray = [3, 2, 1];

if (sourceArray.length !== targetArray.length) {
    // not equal
    // did something
    return false;
}

var newSortedSourceArray = sourceArray.slice().sort();
var newSortedTargetArray = targetArray.slice().sort();

if (newSortedSourceArray.toString() !== newSortedTargetArray.toString()) { // MAIN CHECK
    // not equal
    // did something
    return false;
}
else {
    // equal
    // did something
    // continued further below
}

// did some more work

return true;

আশা করি এইটি কাজ করবে.


2

ES6 ব্যবহার করে

আমরা equalsরামদার ফাংশনটি ব্যবহার করব , তবে এর পরিবর্তে আমরা লোডাশ বা অ্যান্ডস্কোর ব্যবহার করতে পারি isEqual:

const R = require('ramda');

const arraysHaveSameValues = (arr1, arr2) => R.equals( [...arr1].sort(), [...arr2].sort() )

স্প্রেড বিরোধী ব্যবহার করে, আমরা আসল অ্যারেগুলিকে পরিবর্তন করতে এড়াতে পারি এবং আমরা আমাদের ফাংশনকে বিশুদ্ধ রাখি।


2

আপনি reduceচালাক উপস্থিত হওয়ার জন্য লুপগুলির পরিবর্তে ব্যবহার করতে পারেন তবে আপনার সহকর্মী বিকাশকারীরা আপনাকে স্মার্ট-গাধা হিসাবে ভাবতে ঝুঁকিতে পড়বে।

function isArrayContentSame(a, b) {
  if (Array.isArray(a) && Array.isArray(b) && a.length == b.length) {
    a = a.concat().sort()
    b = b.concat().sort()
    return a.reduce((acc,e,i) => acc && e === b[i], true)
  } else {
    return false;
  }
}

1

অ্যারের আইটেমগুলি আদিম (সংখ্যা বা একক অক্ষর) হয়, আপনি দৈর্ঘ্যের তুলনা এবং সেট ব্যবহার করে একটি সমন্বয় ব্যবহার করতে পারেন।

function equalArrayItems(arr1, arr2) {
  if (arr1.length !== arr2.length) return false
  const set1 = new Set(arr1)
  const set2 = new Set(arr2)
  const set3 = new Set(arr1, arr2)
  return set1.size === set3.size && set2.size === set3.size
}

1

এটি ইতিমধ্যে ২০২০ কিন্তু আমি লক্ষ্য করেছি যে অন্যান্য সমাধানগুলির বেশিরভাগ ক্ষেত্রে বাছাই করুন, ও (এন * লগ এন), লাইব্রেরি ব্যবহার করুন বা ও (এন ^ 2) জটিলতা রয়েছে।

লিনিয়ার জটিলতার সাথে এখানে একটি খাঁটি জাভাস্ক্রিপ্ট সমাধান রয়েছে, ও (এন):

/**
 * Check if two arrays of strings or numbers have the same values regardless of the order
 * @param {string[]|number[]} arr1
 * @param {string[]|number[]} arr2
 * @return {boolean}
 */    
compareArrays = (arr1, arr2) => {
    if (arr1.length !== arr2.length) return false;
    const lk1 = {};
    const lk2 = {};
    let i = arr1.length;
    while (--i >= 0) {
        lk1[arr1[i]] = true;
        lk2[arr2[i]] = true
    }
    i = arr1.length;
    while (--i >= 0) {
        const v = arr1[i];
        if (lk1[v] !== lk2[v]) return false;
    }
    return true
}

পরীক্ষা:

compareArrays([2, 4], [4, 2]) => true
compareArrays([2, 4], [4, 2, 7]) => false
compareArrays([], []) => true

1
আরে, এটি একটি দুর্দান্ত প্রবেশ! এটি বেশ সংশ্লেষিত তবে এটি কোনও তাৎপর্যপূর্ণ। আমার একটি প্রশ্ন আছে: আমি বিগ ও স্বরলিপিটির সাথে খুব বেশি পরিচিত নই, তবে অবশ্যই এই অ্যালগরিদমটি ও (2 এন)? মনে হয় না যে এটি একটি পার্থক্য খুব অনেক তোলে।
কার্লোস প্রিকোসো

1
@ কার্লোসপ্রিসিওসো এটি সঠিক এবং ও (2 এন) = ও (এন)। জটিলতা ধ্রুবক ফ্যাক্টর
SC1000

0

আপনি যদি প্রোটোটাইপ ফ্রেমওয়ার্ক ব্যবহার করে থাকেন তবে কোনও অ্যারের ছেদ করার পদ্ধতিটি ব্যবহার করে আপনি সেগুলি একই (ক্রম নির্বিশেষে) নির্ধারণ করতে পারেন:

var array1 = [1,2];
var array2 = [2,1];

if(array1.intersect(array2).length === array1.length) {
    alert("arrays are the same!");
}

এটি কাজ করে না - [1,2].intersect([1,2,3]).length === [1,2].lengthসত্য প্রত্যাবর্তন করে। আপনার মূল অ্যারের দৈর্ঘ্যের তুলনা করা উচিত, আমি প্রদর্শন করতে পোস্ট সম্পাদনা করেছি।
জিএমএ

আসলে আমি বুঝতে পেরেছি যে আমার প্রস্তাবিত সম্পাদনাটি সদৃশগুলির ক্ষেত্রে কার্যকর হয় না ... উদাহরণস্বরূপ এটি মিথ্যা হয়ে যাবে array1 = [1,1,2]; array2 = [1,1,2];... মূল উত্তরটি এই ইনপুটটির জন্য ব্যর্থ হয় না।
জিএমএ

আপনি_.difference(array1, array2).length;
ভিক এর

0

দয়া করে এই উত্তরটি পরীক্ষা করুন

var arr1= [12,18];
var arr2= [12, 18, 20, 11, 19, 14, 6, 7, 8, 16, 9, 3, 1, 13, 5, 4, 15, 10, 2, 17];
for(i=0;i<arr1.length;i++)
{
var array1=arr1[i];
for(j=0;j<arr2.length;j++)
{
    var array2=arr2[j];
    if(array1==array2)
    {
return true;
    }
}
}

2
এটি কার্যত এই উত্তরের সমতুল্য , কয়েকটি ত্রুটির জন্য সংরক্ষণ করুন। প্রথমত, এগুলি সমস্ত কোনও ফাংশনের মধ্যে আবৃত করা উচিত, বা এর returnকোনও প্রভাব থাকবে না। দ্বিতীয়ত, আপনি সাজানো অ্যারে পরীক্ষা করা উচিত, [1,2]এবং [2,1]হিসাবে একই নয় সনাক্ত করা হবে। তৃতীয় এবং সর্বাধিক গুরুত্বপূর্ণ, এটি কেবল তখনই পরীক্ষা করবে যে কোনও উপাদান একই রকম কিনা। শর্তসাপেক্ষ হওয়া উচিত if (array1!==array2) {return false;}। ভবিষ্যতে এটি আপনাকে সহায়তা করতে পারে!
কার্লোস প্রিকোসো

1
এবং একটি অতিরিক্ত মন্তব্য হিসাবে, কোড প্রবাহ এবং সেইসাথে পরিষ্কার ভেরিয়েবলের নামগুলি আরও ভালভাবে বোঝার জন্য ইনডেন্টেশন ব্যবহার করার চেষ্টা করুন। উদাহরণস্বরূপ: array1এবং array2নামকরণ করা যেতে পারে elem1এবং elem2। এই দুটি টিপসই আপনাকে ভবিষ্যতে প্রচুর মাথাব্যাথা বাঁচাবে!
কার্লোস প্রিকোসো

2
আরও পরিদর্শন করার পরে, কেন ডাবল লুপ? উভয় অ্যারে একই দৈর্ঘ্য হওয়া উচিত, এবং যদি না হয় তবে তারা সরাসরি সমান হয় না। এইভাবে আপনি কেবল একটি লুপ ব্যবহার করতে পারেন। ঠিক এখন, এই কোড চেক যদি কোনো প্রথম অ্যারের উপাদানের হয় যে কোন জায়গায় দ্বিতীয় হবে। আপনার কীভাবে এটি প্রয়োগ করা উচিত তা দেখতে এই উত্তরটি দেখুন। আপনার জাভাস্ক্রিপ্ট যাত্রায় শুভকামনা!
কার্লোস প্রিকোসো

0

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

এখন আমরা একাধিক লাইব্রেরি ব্যবহার করে এটি অর্জন করতে পারি lodash,underscore ইত্যাদি (এই সরলতা, একাধিক বৈশিষ্ট্য এবং উচ্চ ব্যবহারের কারণে আজকাল প্রকল্পের অংশ)

আপনি লোডাশ লাইব্রেরি থেকে ছেদ ব্যবহার করতে পারেন।

_.intersection(['2-1', '1'], ['2-2', '3-1', '2-1']); 
// => ['2-1']

এটি যে কোনও ডেটা ধরণের জন্য কাজ করবে ..


0

আপনি যদি দুটি অ্যারে তুলনা করতে চান এবং উভয় অ্যারেতে কোনও বস্তু সমান কিনা তা পরীক্ষা করতে চান তবে এটি কাজ করবে। উদাহরণ:

অ্যারে 1 = [ক, খ, সি, ডি]
অ্যারে ২ = [ডি, ই, এফ, জি]

এখানে, 'd' উভয় অ্যারেতে সাধারণ তাই এই ফাংশনটি সত্যিকারের মান ফেরত দেবে।

  cehckArray(array1, array2) {
    for (let i = 0; i < array1.length; i++) {
      for (let j = 0; j < array2.length; j++) {
        if (array1[i] === array2[j]) {
          return true;
        }
      }
    }
    // Return if no common element exist 
    return false;
  }


0

স্বীকৃত উত্তরের ভিত্তিতে আমার কাছে অন্য উপায় রয়েছে।

function compareArrays(array1, array2) {

    if (
        !Array.isArray(array1)
        || !Array.isArray(array2)
        || array1.length !== array2.length
    ) return false;

    var first = array1.sort().map(value => (String(value))).join();
    var second = array2.sort().map(value => (String(value))).join();

    return first == second ? true : false;
}

আরে, স্ট্যাকওভারফ্লোতে আপনাকে স্বাগতম! যদিও এই উত্তরটি কিছু ক্ষেত্রে কার্যকর হবে, এমন কিছু সুনির্দিষ্ট কেস থাকবে যেখানে এটি হবে না। প্রথমে, মনে রাখবেন যে .sort () মূল অ্যারেটি পরিবর্তন করে। আজকাল এটি দুর্বল স্বাস্থ্যবিধি হিসাবে বিবেচনা করা হয়, এজন্যই মূল উত্তরটি প্রথমে একটি কপি তৈরি করতে একটি .ccat () করে।
কার্লোস প্রিকোসো

এবং দ্বিতীয় বিষয়, এটি জাভাস্ক্রিপ্টের বাকী অংশগুলির সাথে ধারাবাহিকভাবে কাজ করবে না। oo foo: "বার"} === {foo: "দণ্ড" false মিথ্যা ফিরিয়ে দেয় (এগুলি পৃথকভাবে নির্মিত দুটি স্বতন্ত্র বস্তু); সুতরাং তুলনা করুন অ্যারে ([{foo: "বার"}], [{foo: "বার"}]), এছাড়াও ধারাবাহিকতার জন্য মিথ্যা ফিরিয়ে নেওয়া উচিত। যাইহোক, আপনার বাস্তবায়নের সাথে এটি সত্য হয়, কারণ বস্তুর স্ট্রিং প্রতিনিধিত্ব একই। এটি একটি কাঙ্ক্ষিত আচরণ হতে পারে বা নাও হতে পারে তবে যে কোনও ক্ষেত্রেই এটি মনে রাখা উচিত।
কার্লোস প্রিকোসো

0

দুটি অ্যারের সাথে তুলনা করার জন্য একটি ফাংশন, উভয়ের ক্ষেত্রে একই উপাদান রয়েছে কিনা তা পরীক্ষা করতে। এমনকি যদি তারা অর্ডার থেকে বাইরে থাকে ...

এটি সহজ অ্যারেগুলির জন্য ভাল। [স্ট্রিং, সংখ্যা, বুলিয়ান, নাল, নান]।

আমি .sort () ব্যবহার করি না, এটি মূল অ্যারেটি পরিবর্তন করে। কেউ কেউ বলেন এর খারাপ ...

সতর্ক করা. এই ফাংশনটি সীমাবদ্ধ এটি অবজেক্টগুলি "[], {}" বা এই অ্যারেগুলির মধ্যে ফাংশনগুলির সাথে তুলনা করতে পারে না, তার নিজস্ব অ্যারেগুলি অবজেক্ট।

   let arraysHasSameElements = (arr1, arr2) => {
        let count =
            // returns counting of occurrences.
            (arr, val) => arr.reduce((count, curr) => (curr === val ? 1 : 0) + count, 0);

        /* this will return true if lengths of the arrays is equal.
           then compare them.*/
        return arr1.length === arr2.length

            // compare arr1 against arr2.
            && arr1.reduce((checks, val) =>

                /*  creating array of checking if a value has equal amount of occurrences
                    in both arrays, then adds true 'check'. */
                checks.concat(count(arr1, val) === count(arr2, val)), [])

                // checking if each check is equal to true, then .every() returns true.
                .every(check => check);
    }

    let arr1 = ['',-99,true,NaN,21,null,false,'help',-99,'help',NaN], 
        arr2 = [null,-99,'',NaN,NaN,false,true,-99,'help',21,'help'];
    arraysHasSameElements(arr1, arr2); //true

    let arr3 = [false,false,false,false,false,false], 
        arr4 = [false,false,false,false,false,false]
    arraysHasSameElements(arr3, arr4); //true


    // here we have uncommented version.
    let arraysHasSameElements = (arr1, arr2) => {
        let count = (arr, val) => arr.reduce((count, curr) => (curr === val ? 1:0) + count, 0);
        return arr1.length === arr2.length && arr1.reduce((checks, val) =>
            checks.concat(count(arr1, val) === count(arr2, val)), []).every(check => check);
    }

-1

দুটি অ্যারে তুলনা করার সহজ সমাধান:

var array1 = [2, 4];
var array2 = [4, 2];

array1.sort();
array2.sort();

if (array1[0] == array2[0]) {
    console.log("Success");
}else{
    console.log("Wrong");
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.