একটি অ্যারেতে কীভাবে অনন্য মান পাবেন


167

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

আমি কেবল জাভাস্ক্রিপ্ট এবং jQuery ব্যবহার করতে যাচ্ছি । কোনও অতিরিক্ত লাইব্রেরি ব্যবহার করা যাবে না।


2
stackoverflow.com/questions/5381621/… - আপনি আমার মতামতটি কি চান তা বর্ণনা করে?
স্পেসবিসন

1
আপনি underscore.jsগ্রন্থাগার ব্যবহারের জন্য উন্মুক্ত ?
জেকি

একটি জাভা হ্যাশম্যাপ মূলত জাভাস্ক্রিপ্ট অবজেক্টের সমান। সিনট্যাক্সটি হ'ল "কী": "মান", "কী 2": "মান 2"}
আয়ান

জাভাস্ক্রিপ্ট / টাইপস্ক্রিপ্ট সংগ্রহের এপিআইগুলি স্কালার তুলনায় ভয়ানক,list.toSet
জর্ডান স্টুয়ার্ট

উত্তর:


120

যেহেতু @ রকেটের উত্তরের মন্তব্যে আমি এটি সম্পর্কে আলোচনা করেছি তাই আমি পাশাপাশি একটি উদাহরণ প্রদান করতে পারি যা কোনও লাইব্রেরি ব্যবহার করে না। এর জন্য দুটি নতুন প্রোটোটাইপ ফাংশন প্রয়োজন, containsএবংunique

Array.prototype.contains = function(v) {
  for (var i = 0; i < this.length; i++) {
    if (this[i] === v) return true;
  }
  return false;
};

Array.prototype.unique = function() {
  var arr = [];
  for (var i = 0; i < this.length; i++) {
    if (!arr.contains(this[i])) {
      arr.push(this[i]);
    }
  }
  return arr;
}

var duplicates = [1, 3, 4, 2, 1, 2, 3, 8];
var uniques = duplicates.unique(); // result = [1,3,4,2,8]

console.log(uniques);

আরও নির্ভরযোগ্যতার জন্য, আপনি containsMDN এর indexOfশিমের সাথে প্রতিস্থাপন করতে পারেন এবং পরীক্ষা করতে পারেন যে প্রতিটি উপাদান indexOf-1: ডকুমেন্টেশনের সমান কিনা


1
~a.indexOf(b) === (a.indexOf(b) == -1)
অরওলোফাইল

1
@ ল্যাক্সিনাক্স: গিরিযুক্ত জাভাস্ক্রিপ্ট-বুদ্ধিযুক্ত উত্তরটি যদি এমন হয় তবে এটির অর্থ কী তা বোঝে এমন কোনও ব্যক্তিকেই ব্যবহার করা উচিত, এবং সম্ভবত তখনও তা নয়। এইটা কি বললেন, যে লেখা হয় if (~a.indexOf(b)) ...হয় অভিন্ন আর লেখার জন্য if (a.indexOf(b) == -1) ...
ওড়ওলোফাইল

4
এটির একটি উচ্চ রানের জটিলতা রয়েছে (সবচেয়ে খারাপ ক্ষেত্রে: O (n ^ 2))
রাহুল অরোরা

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

1
আমাদের কি আসলে "সমন্বিত" ফাংশন দরকার?
অনিমেষ কুমার

206

বা যারা বর্তমান ব্রাউজারগুলির সাথে সামঞ্জস্যপূর্ণ ওয়ান-লাইনার (সাধারণ এবং কার্যকরী) সন্ধান করছেন তাদের জন্য :

let a = ["1", "1", "2", "3", "3", "1"];
let unique = a.filter((item, i, ar) => ar.indexOf(item) === i);
console.log(unique);

আপডেট 18-04-2017

এটি প্রদর্শিত হচ্ছে যেমন 'অ্যারে.প্রোটোটাইপ.কম্পিউডস' এর এখন মেইনলাইন ব্রাউজারগুলির সর্বশেষতম সংস্করণগুলিতে ব্যাপক সমর্থন রয়েছে ( সামঞ্জস্যতা )

29-07-2015 আপডেট করুন:

ব্রাউজারগুলির জন্য একটি স্ট্যান্ডার্ডাইজড 'অ্যারে.প্রোটোটাইপ.আইনক্লুডস' পদ্ধতিটিকে সমর্থন করার পরিকল্পনা রয়েছে, যা সরাসরি এই প্রশ্নের উত্তর দেয় না; প্রায়শই সম্পর্কিত হয়।

ব্যবহার:

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

পলিফিল ( ব্রাউজার সমর্থন , মোজিলা থেকে উত্স ):

// https://tc39.github.io/ecma262/#sec-array.prototype.includes
if (!Array.prototype.includes) {
  Object.defineProperty(Array.prototype, 'includes', {
    value: function(searchElement, fromIndex) {

      // 1. Let O be ? ToObject(this value).
      if (this == null) {
        throw new TypeError('"this" is null or not defined');
      }

      var o = Object(this);

      // 2. Let len be ? ToLength(? Get(O, "length")).
      var len = o.length >>> 0;

      // 3. If len is 0, return false.
      if (len === 0) {
        return false;
      }

      // 4. Let n be ? ToInteger(fromIndex).
      //    (If fromIndex is undefined, this step produces the value 0.)
      var n = fromIndex | 0;

      // 5. If n ≥ 0, then
      //  a. Let k be n.
      // 6. Else n < 0,
      //  a. Let k be len + n.
      //  b. If k < 0, let k be 0.
      var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);

      // 7. Repeat, while k < len
      while (k < len) {
        // a. Let elementK be the result of ? Get(O, ! ToString(k)).
        // b. If SameValueZero(searchElement, elementK) is true, return true.
        // c. Increase k by 1.
        // NOTE: === provides the correct "SameValueZero" comparison needed here.
        if (o[k] === searchElement) {
          return true;
        }
        k++;
      }

      // 8. Return false
      return false;
    }
  });
}

এটি কেনেবেকের কাছ থেকে প্রায় অনুলিপি করা হয়েছে, তবে স্বীকার করে বন্ধটি ব্যবহার না করে প্যারামিটার হিসাবে অ্যারে পাস করা সম্ভবত কার্যকারিতা উন্নত করবে।

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

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

1
। @GerardONeill হাঁ, কিছু পরিস্থিতিতে এটা খুবই গুরুত্বপূর্ণ, যেমন হলে এটা বৈশিষ্ট্যগুলি শৃঙ্খলিত হয় এবং আপনি একটি অ্যারের যে এই ধরনের .map (...) হিসাবে একটি পরিবর্তনশীল বরাদ্দ করা হয়েছে অ্যাক্সেস চান ফিল্টার (...)
জোশ বিভাগ

@ জোশ ম্যাক, আপনি কি কোনওভাবে 'অনন্য' পদ্ধতিতে 'অন্তর্ভুক্ত' ব্যবহার করতে পারেন?
ভেকেলম্যান

142

ES6 এর জন্য এখানে অনেক ক্লিনার সমাধান রয়েছে যা আমি দেখছি যে এখানে অন্তর্ভুক্ত নেই। এটি সেট এবং স্প্রেড অপারেটর ব্যবহার করে :...

var a = [1, 1, 2];

[... new Set(a)]

যা ফিরে আসে [1, 2]


1
এতো চালাক!
জোশ ম্যাক

1
এখন, এই একটি এক মাছ ধরার নৌকা হয়!
ম্যাক 20

11
টাইপসক্রিপ্টে আপনাকে ব্যবহার করতে হবে Array.from(... new Set(a))যেহেতু সেট সুস্পষ্টভাবে একটি অ্যারে প্রকারে রূপান্তর করা যায় না। শুধু একটি মাথা আপ!
Zachscs

4
@ জ্যাচস্কস, আমি যখন এটি চেষ্টা করেছি তখন একটি সংকলন ত্রুটি পেয়েছি। তুমি কি ঠিক বলেছ Array.from(new Set(a))? কাজ করে মনে হচ্ছে।
adam0101

71

ওয়ান লাইনার, খাঁটি জাভাস্ক্রিপ্ট

ES6 সিনট্যাক্স সহ

list = list.filter((x, i, a) => a.indexOf(x) === i)

x --> item in array
i --> index of item
a --> array reference, (in this case "list")

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

ES5 সিনট্যাক্স সহ

list = list.filter(function (x, i, a) { 
    return a.indexOf(x) === i; 
});

ব্রাউজার সামঞ্জস্য : আই 9 +


4
কেন এটিকে ভোট দেওয়া হয়েছিল তা নিশ্চিত নয়। এটি প্রথমে কিছুটা অস্পষ্ট হতে পারে এবং সম্ভবত এটি 'চালাক' হিসাবে শ্রেণিবদ্ধ এবং পড়ার পক্ষে বাস্তববাদী নয়, তবে এটি ঘোষণামূলক, অ-ধ্বংসাত্মক এবং সংক্ষিপ্ত, যেখানে অন্যান্য উত্তরগুলির বেশিরভাগ অভাব রয়েছে।
ল্যারি

1
@ ল্যারি এটিকে নিচে ভোট দেওয়া হয়েছিল কারণ ঠিক এই উত্তরটি উত্তর দেওয়ার বহু বছর আগে দেওয়া হয়েছিল।
অ্যালেক্স Okrushko

@ অ্যালেক্স ওক্রুশকো যথেষ্ট ন্যায্য - যেভাবে উত্তরটি ফর্ম্যাট করা হয়েছিল সে কারণেই উত্তরটি মিস করেছেন
ল্যারি

7
আপনি যদি সমস্ত কিছু এক লাইনে রাখেন তবে সবকিছুই এক-লাইনার :-)
গ্যারি ম্যাকগিল

সমতাটি a.indexOf(x) === iনোটটি তিনটি সমান লক্ষণগুলি আরও শক্ত করা ভাল হতে পারে ।
ট্রিজানিটর

21

এখন ES6 এ আমরা নতুনভাবে প্রবর্তিত ES6 ফাংশনটি ব্যবহার করতে পারি

let items = [1,1,1,1,3,4,5,2,23,1,4,4,4,2,2,2]
let uniqueItems = Array.from(new Set(items))

বা অ্যারে দ্বারা পুনরাবৃত্তীয়গুলিতে সংশ্লেষ ছড়িয়ে দিন

let items = [1,1,1,1,3,4,5,2,23,1,4,4,4,2,2,2]; 
let uniqueItems = [...new Set(items)];

এটি অনন্য ফলাফল ফিরে আসবে।

[1, 3, 4, 5, 2, 23]

1
সবচেয়ে পরিষ্কার সমাধান!
দিমিত্রিস ফিলিপো

এটি যাওয়ার উপায়, যখন কোনও জেএস পরিবেশে এটির new Setমতো সমর্থন করে (যেমন আধুনিক কৌণিক / টাইপস্ক্রিপ্ট)
ডন

1
এটি লক্ষণীয় যে আপনি সেট এবং মানচিত্রের মতো পুনরাবৃত্তিতে অ্যারে স্প্রেড সিনট্যাক্সটিও ব্যবহার করতে পারেন: let items = [1,1,1,1,3,4,5,2,23,1,4,4,4,2,2,2]; let uniqueItems = [...new Set(items)];
জ্যাকোবেডসন

আমি এই ES6 উত্তর ভালবাসি!
গ্লেন থম্পসন

1
এটি @ আদিল ইমরানের উত্তরের অনুরূপ। দয়া করে এমন উত্তরগুলি দিবেন না যা বিদ্যমান উত্তরের সাথে ঠিক একই রকম হয়।
টিমম্মে

20

ইকামাস্ক্রিপ্ট 2016 ব্যবহার করে আপনি এটি সহজভাবে এটি করতে পারেন।

 var arr = ["a", "a", "b"];
 var uniqueArray = Array.from(new Set(arr)); // Unique Array ['a', 'b'];

সেটগুলি সর্বদা অনন্য এবং Array.from()আপনি একটি সেটকে অ্যারেতে রূপান্তর করতে পারেন using রেফারেন্সের জন্য ডকুমেন্টেশনগুলি একবার দেখুন।

https://developer.mozilla.org/en-US/docs/Web/JavaScript/ উল্লেখ / গ্লোবাল_অবজেক্টস / আর্য/ ফ্রোম / সেট


1
উত্তরটি আপনার ব্যবহার করা উচিত। indexOf()উত্তরগুলি ভয়াবহ কারণ তারা ও (এন ^ 2)। স্প্রেড উত্তরগুলি ঠিক আছে তবে বড় অ্যারেগুলির জন্য কাজ করবে না। এটি সর্বোত্তম পন্থা।
টিম্ম্ম্ম

16

আপনি যদি মূল অ্যারেটি অক্ষত রাখতে চান,

প্রথমটির একক উপাদানগুলির জন্য আপনাকে একটি দ্বিতীয় অ্যারের দরকার

বেশিরভাগ ব্রাউজারের রয়েছে Array.prototype.filter:

var unique= array1.filter(function(itm, i){
    return array1.indexOf(itm)== i; 
    // returns true for only the first instance of itm
});


//if you need a 'shim':
Array.prototype.filter= Array.prototype.filter || function(fun, scope){
    var T= this, A= [], i= 0, itm, L= T.length;
    if(typeof fun== 'function'){
        while(i<L){
            if(i in T){
                itm= T[i];
                if(fun.call(scope, itm, i, T)) A[A.length]= itm;
            }
            ++i;
        }
    }
    return A;
}
 Array.prototype.indexOf= Array.prototype.indexOf || function(what, i){
        if(!i || typeof i!= 'number') i= 0;
        var L= this.length;
        while(i<L){
            if(this[i]=== what) return i;
            ++i;
        }
        return -1;
    }

14

এই দিনগুলিতে, আপনি আপনার অ্যারেটিকে একটি অনন্য সেটে রূপান্তর করতে ES6 এর সেট ডেটা টাইপ ব্যবহার করতে পারেন। তারপরে, যদি আপনাকে অ্যারে পদ্ধতিগুলি ব্যবহার করতে হয় তবে আপনি এটিকে আবার অ্যারেতে পরিণত করতে পারেন:

var arr = ["a", "a", "b"];
var uniqueSet = new Set(arr); // {"a", "b"}
var uniqueArr = Array.from(uniqueSet); // ["a", "b"]
//Then continue to use array methods:
uniqueArr.join(", "); // "a, b"

1
ঝরঝরে, কিছু পারফোমেন্স নম্বর দেখতে ভাল লাগবে, আমি মনে করি বিশেষত সেগুলি সেটগুলি রূপান্তর করা যদি তারা খুব গতিশীল এবং বড় হয় তবে একটি পারফরম্যান্স হিকআপ হতে পারে, কেবলমাত্র বলার জন্য পরীক্ষা করা যায় :)
নভোচারী

2
আপনি যদি ট্রান্সপ্লার ব্যবহার করছেন বা এমন পরিবেশে আছেন যা এটি সমর্থন করে, আপনি একই জিনিস আরও সংক্ষিপ্তভাবে করতে পারেন:var uniqueArr = [...new Set(arr)]; // ["a", "b"]
স্টেনারসন

আরে @ অস্ট্রোনট আপনার মতামত নিয়ে কিছু পরীক্ষা করেছে?
আলেকজেন্তুরিও

8

জাভাস্ক্রিপ্টে নেটিভ নয়, প্রচুর লাইব্রেরিতে এই পদ্ধতি রয়েছে।

অ্যান্ডস্কোর.জেএস এর _.uniq(array)( লিঙ্ক ) বেশ ভাল কাজ করে ( উত্স )।


শেয়ার করার জন্য ধন্যবাদ! এই ফাংশনটি v1.4.3 থেকে আর্গুমেন্টের তালিকা হিসাবে অ্যারের সাথে পুনরাবৃত্তি এবং প্রসঙ্গটি গ্রহণ করে।
কুঞ্জ

6

JQuery ব্যবহার করে, আমি তৈরি করেছি এমন একটি অ্যারে অনন্য ফাংশন:

Array.prototype.unique = function () {
    var arr = this;
    return $.grep(arr, function (v, i) {
        return $.inArray(v, arr) === i;
    });
}

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

5
আপনি যদি কোনও মূল জাভাস্ক্রিপ্ট অবজেক্টের প্রোটোটাইপের ভিতরে jQuery ব্যবহার করতে চলেছেন তবে jQuery ফাংশন যেমন লেখার চেয়ে ভাল হয় না $.uniqueArray(arr)? Arrayএর প্রোটোটাইপের মধ্যে
jQuery- তে

1
@ জ্যাকওয়ান্ডার্স: এটি সম্পর্কে এতটা প্রশ্নবিদ্ধ কী? আপনি যদি পৃষ্ঠাটিতে jQuery পেয়ে থাকেন তবে আসুন এটি ব্যবহার করুন।
রকেট হাজমত

আপনি যে নতুন অনন্য ক্রিয়াকলাপটি লিখেছেন তা এখন jQuery এর উপর নির্ভরশীল; jQuery সেখানে ব্যবহৃত হচ্ছে তা নিশ্চিত করে আপনি এটিকে কোনও নতুন সাইট বা অ্যাপে সরাতে পারবেন না।
jackwanders

2
এটা আমার বক্তব্য ছিল; আপনি যদি jQuery ব্যবহার করতে চলেছেন তবে ফাংশনটি নিজেই jQuery এর অংশ করুন। আমি যদি কোনও মূল অবজেক্টের প্রোটোটাইপ প্রসারিত করতে যাই, তবে আমি মূল জাভাস্ক্রিপ্টকে আটকে রেখেছি, কেবল জিনিসগুলি পুনরায় ব্যবহারযোগ্য করে রাখতে। অন্য কেউ যদি আপনার কোডটির দিকে তাকাচ্ছেন, তবে এটি স্পষ্টতই $.uniqueArrayজিকুয়েরির উপর নির্ভরশীল; কম স্পষ্ট যে Array.prototype.uniqueপাশাপাশি।
jackwanders

1
@ জ্যাকওয়ান্ডার্স: আমার ধারণা আমি এটিকে আমার কোডটিতে ব্যবহার করি, যেমন আমি সবসময় jQuery ব্যবহার করি এবং আমি কেবল প্রসারিত করতে পছন্দ করি prototype। তবে, আমি এখন আপনার বিষয়টি বুঝতে পারি understand আমি যাইহোক এই এখানে ছেড়ে দেব।
রকেট হাজমত

6

দ্বিতীয় অ্যারে ব্যবহার করে সংক্ষিপ্ত এবং মিষ্টি সমাধান;

var axes2=[1,4,5,2,3,1,2,3,4,5,1,3,4];

    var distinct_axes2=[];

    for(var i=0;i<axes2.length;i++)
        {
        var str=axes2[i];
        if(distinct_axes2.indexOf(str)==-1)
            {
            distinct_axes2.push(str);
            }
        }
    console.log("distinct_axes2 : "+distinct_axes2); // distinct_axes2 : 1,4,5,2,3

সংক্ষিপ্ত? এবং মিষ্টি? আপনি কি শীর্ষ সমাধানগুলি দেখেছেন?
অ্যালেক্স Okrushko

5

দ্রুত, কমপ্যাক্ট, কোনও নেস্টেড লুপ নেই, কোনও স্ট্রিং এবং সংখ্যা নয় কেবল কোনও বস্তুর সাথে কাজ করে, একটি প্রিডিকেট নেয় এবং কোডের মাত্র 5 লাইন !!

function findUnique(arr, predicate) {
  var found = {};
  arr.forEach(d => {
    found[predicate(d)] = d;
  });
  return Object.keys(found).map(key => found[key]); 
}

উদাহরণ: টাইপ করে অনন্য আইটেমগুলি সন্ধান করতে:

var things = [
  { name: 'charm', type: 'quark'},
  { name: 'strange', type: 'quark'},
  { name: 'proton', type: 'boson'},
];

var result = findUnique(things, d => d.type);
//  [
//    { name: 'charm', type: 'quark'},
//    { name: 'proton', type: 'boson'}
//  ] 

আপনি যদি এটি সর্বশেষের পরিবর্তে প্রথম অনন্য আইটেমটি সন্ধান করতে চান তবে সেখানে একটি চেক ইন করুন hasঅনসনপ্রোপারি () যুক্ত করুন।


4

অ্যারে.সোম এবং অ্যারে.রেডুসের সাথে অদ্বিতীয়গুলি খুঁজতে আপনার কেবল ভ্যানিলা জেএস দরকার। ES2015 সিনট্যাক্স সহ এটি কেবল 62 টি অক্ষর।

a.reduce((c, v) => b.some(w => w === v) ? c : c.concat(v)), b)

অ্যারে.সোম এবং অ্যারে.রেডুস আইই 9 + এবং অন্যান্য ব্রাউজারগুলিতে সমর্থিত। ES2015 সিনট্যাক্স সমর্থন করে না এমন ব্রাউজারগুলিতে সমর্থন করার জন্য নিয়মিত ফাংশনগুলির জন্য কেবল ফ্যাট এ্যার ফাংশনগুলি পরিবর্তন করুন।

var a = [1,2,3];
var b = [4,5,6];
// .reduce can return a subset or superset
var uniques = a.reduce(function(c, v){
    // .some stops on the first time the function returns true                
    return (b.some(function(w){ return w === v; }) ?  
      // if there's a match, return the array "c"
      c :     
      // if there's no match, then add to the end and return the entire array                                        
      c.concat(v)}),                                  
  // the second param in .reduce is the starting variable. This is will be "c" the first time it runs.
  b);                                                 

https://developer.mozilla.org/en-US/docs/Web/JavaScript/ উল্লেখ / গ্লোবাল_অবজেক্টস / অ্যারে / সোমস https://developer.mozilla.org/en-US/docs/Web/ জাভা স্ক্রিপ্ট / রেফারেন্স / গ্লোবাল_অবজেক্টস / array / কমাতে


4

উপরের সমাধানগুলির বেশিরভাগের একটি উচ্চ রান সময় জটিলতা রয়েছে।

ও (এন) সময়েreduce কাজটি করতে পারে এবং করতে পারে এমন সমাধানটি এখানে

Array.prototype.unique = Array.prototype.unique || function() {
        var arr = [];
	this.reduce(function (hash, num) {
		if(typeof hash[num] === 'undefined') {
			hash[num] = 1; 
			arr.push(num);
		}
		return hash;
	}, {});
	return arr;
}
    
var myArr = [3,1,2,3,3,3];
console.log(myArr.unique()); //[3,1,2];

বিঃদ্রঃ:

এই সমাধান হ্রাস উপর নির্ভর করে না। ধারণাটি হ'ল একটি অবজেক্ট ম্যাপ তৈরি করা এবং অনন্যকে অ্যারেতে ঠেকানো।



1

তুমি ব্যবহার করতে পার,

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

let arr3 = [...new Set([...arr1,...arr2])];

এটি আপনাকে অনন্য উপাদান দেবে,

**> তবে একটি ধরা আছে,

এই "1" এবং 1 এর জন্য এবং বিভিন্ন উপাদান, **

দ্বিতীয় বিকল্পটি অ্যারেতে ফিল্টার পদ্ধতি ব্যবহার করা।


1

আপনি সদৃশগুলি সহ অ্যারে প্রবেশ করতে পারেন এবং নীচের পদ্ধতিতে অনন্য উপাদানগুলির সাথে অ্যারে ফিরে আসবে।

function getUniqueArray(array){
    var uniqueArray = [];
    if (array.length > 0) {
       uniqueArray[0] = array[0];
    }
    for(var i = 0; i < array.length; i++){
        var isExist = false;
        for(var j = 0; j < uniqueArray.length; j++){
            if(array[i] == uniqueArray[j]){
                isExist = true;
                break;
            }
            else{
                isExist = false;
            }
        }
        if(isExist == false){
            uniqueArray[uniqueArray.length] = array[i];
        }
    }
    return uniqueArray;
}

0

এখনও পর্যন্ত প্রদত্ত সমাধানগুলির সাথে একমাত্র সমস্যা হ'ল দক্ষতা। যদি আপনি সে সম্পর্কে উদ্বিগ্ন হন (এবং আপনার সম্ভবত হওয়া উচিত) আপনার নেস্টেড লুপগুলি এড়াতে হবে: * এর জন্য, * ইন্ডেক্সফোরক, গ্রেপ * ইনআর্রে ফিল্টার করুন, তারা সবগুলি অ্যারে একাধিকবার পুনরাবৃত্তি করে। তোমার মত সমাধান সঙ্গে একটি একক লুপ বাস্তবায়ন করতে পারে এই বা এই


0
Array.prototype.unique = function () {
    var dictionary = {};
    var uniqueValues = [];
    for (var i = 0; i < this.length; i++) {
        if (dictionary[this[i]] == undefined){
            dictionary[this[i]] = i;
            uniqueValues.push(this[i]);
        }
    }
    return uniqueValues; 
}

0

আমি খাঁটি জেএসে এই সমস্যাটি চেষ্টা করেছি। আমি নিম্নলিখিত পদক্ষেপগুলি অনুসরণ করেছি 1. প্রদত্ত অ্যারে বাছাই করুন, 2. বাছাই করা অ্যারের মাধ্যমে লুপ করুন, 3. বর্তমান মান সহ পূর্ববর্তী মান এবং পরবর্তী মানটি যাচাই করুন

// JS
var inpArr = [1, 5, 5, 4, 3, 3, 2, 2, 2,2, 100, 100, -1];

//sort the given array
inpArr.sort(function(a, b){
    return a-b;
});

var finalArr = [];
//loop through the inpArr
for(var i=0; i<inpArr.length; i++){
    //check previous and next value 
  if(inpArr[i-1]!=inpArr[i] && inpArr[i] != inpArr[i+1]){
        finalArr.push(inpArr[i]);
  }
}
console.log(finalArr);

ডেমো


0
function findUniques(arr){
  let uniques = []
  arr.forEach(n => {
    if(!uniques.includes(n)){
      uniques.push(n)
    }       
  })
  return uniques
}

let arr = ["3", "3", "4", "4", "4", "5", "7", "9", "b", "d", "e", "f", "h", "q", "r", "t", "t"]

findUniques(arr)
// ["3", "4", "5", "7", "9", "b", "d", "e", "f", "h", "q", "r", "t"]

0

মনে রাখবেন যে indexOfকোনও উপাদানটির প্রথম উপস্থিতি ফিরে আসবে, আপনি এরকম কিছু করতে পারেন:

Array.prototype.unique = function(){
        var self = this;
        return this.filter(function(elem, index){
            return self.indexOf(elem) === index;
        })
    }

0

আপনার যদি পুরানো ব্রাউজারগুলির সম্পর্কে এতটা চিন্তা করার প্রয়োজন না হয় তবে এটি ঠিক সেটের জন্য ডিজাইন করা হয়েছে।

সেট অবজেক্ট আপনাকে যে কোনও প্রকারের অনন্য মান সংরক্ষণ করতে দেয়, আদিম মান বা বস্তুর উল্লেখগুলি whether

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

const set1 = new Set([1, 2, 3, 4, 5, 1]);
// returns Set(5) {1, 2, 3, 4, 5}

0

এই প্রশ্নটির আরেকটি চিন্তাভাবনা। কম কোড দিয়ে এটি অর্জনের জন্য আমি এখানে যা করেছি তা এখানে।

var distinctMap = {};
var testArray = ['John', 'John', 'Jason', 'Jason'];
for (var i = 0; i < testArray.length; i++) {
  var value = testArray[i];
  distinctMap[value] = '';
};
var unique_values = Object.keys(distinctMap);

console.log(unique_values);



0

এখানে কাস্টমাইজেবল equalsফাংশন সহ এমন একটি পদ্ধতি রয়েছে যা আদিমদের পাশাপাশি কাস্টম অবজেক্টগুলির জন্যও ব্যবহার করা যেতে পারে:

Array.prototype.pushUnique = function(element, equalsPredicate = (l, r) => l == r) {
    let res = !this.find(item => equalsPredicate(item, element))
    if(res){
        this.push(element)
    }
    return res
}

ব্যবহার:

//with custom equals for objects
myArrayWithObjects.pushUnique(myObject, (left, right) => left.id == right.id)

//with default equals for primitives
myArrayWithPrimitives.pushUnique(somePrimitive)

0

আমার উত্তরটি অনন্য মূল্যবোধ পাওয়ার জন্য ব্যবহার Array.filterএবং Array.indexOfপদ্ধতিগুলি

array.filter((value, index, self)=>self.indexOf(value)===index)

আমি একটি ওয়েবসাইটে এই পদ্ধতিটি দেখেছি তবে তাদের কোডটি এখানে দেখার চেয়ে আলাদা। আমি কোডটি একটি লাইনে সরল করে দিয়েছি এবং এখানে পোস্ট করছি যাতে কেউ এ থেকে উপকৃত হন

দ্রষ্টব্য: আমার দৃষ্টিভঙ্গি জোশের পোস্ট করা লাইনারের মতো বা তার মত। ভেরিয়েবলের নামগুলি আমার কোডে স্বতঃস্পৃষ্টমূলক হওয়ায় আমি এটি এখানে রেখে যাচ্ছি।


-1

আমি কেবল ভাবছিলাম যদি আমরা সদৃশগুলি অপসারণ করতে রৈখিক অনুসন্ধান ব্যবহার করতে পারি:

JavaScript:
function getUniqueRadios() {

var x=document.getElementById("QnA");
var ansArray = new Array();
var prev;


for (var i=0;i<x.length;i++)
  {
    // Check for unique radio button group
    if (x.elements[i].type == "radio")
    {
            // For the first element prev will be null, hence push it into array and set the prev var.
            if (prev == null)
            {
                prev = x.elements[i].name;
                ansArray.push(x.elements[i].name);
            } else {
                   // We will only push the next radio element if its not identical to previous.
                   if (prev != x.elements[i].name)
                   {
                       prev = x.elements[i].name;
                       ansArray.push(x.elements[i].name);
                   }
            }
    }

  }

   alert(ansArray);

}

এইচটিএমএল:

<body>

<form name="QnA" action="" method='post' ">

<input type="radio"  name="g1" value="ANSTYPE1"> good </input>
<input type="radio" name="g1" value="ANSTYPE2"> avg </input>

<input type="radio"  name="g2" value="ANSTYPE3"> Type1 </input>
<input type="radio" name="g2" value="ANSTYPE2"> Type2 </input>


<input type="submit" value='SUBMIT' onClick="javascript:getUniqueRadios()"></input>


</form>
</body>

-1

সমস্যার এক লাইন সমাধান এখানে:

var seriesValues = [120, 120, 120, 120];
seriesValues = seriesValues.filter((value, index, seriesValues) => (seriesValues.slice(0, index)).indexOf(value) === -1);
console.log(seriesValues);

ব্রাউজার কনসোলে এটি অনুলিপি করুন এবং ফলাফলগুলি পাবেন: y: :)


-2

আমি জিবুয়ারি অনন্য ফাংশন ইনবিল্ট ।

uniqueValues= jQuery.unique( duplicateValues );

আরও জন্য আপনি jquery এপিআই ডকুমেন্টেশন উল্লেখ করতে পারেন।

http://api.jquery.com/jquery.unique/


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