জাভাস্ক্রিপ্টের অ্যারেজেক্টের অবজেক্টের মধ্যে অবজেক্টের মান বিদ্যমান কিনা এবং যদি অ্যারেটিতে কোনও নতুন অবজেক্ট যুক্ত না হয় তা পরীক্ষা করুন


147

যদি আমার কাছে অবজেক্টগুলির নিম্নলিখিত অ্যারে থাকে:

[ { id: 1, username: 'fred' }, { id: 2, username: 'bill' }, { id: 2, username: 'ted' } ]

নির্দিষ্ট ব্যবহারকারীর নামটি ইতিমধ্যে বিদ্যমান আছে কিনা এবং এটি যদি কিছু না করে তা পরীক্ষা করার জন্য অ্যারের মাধ্যমে লুপ করার কোনও উপায় আছে, তবে এটি যদি ব্যবহারকারীর নাম (এবং নতুন আইডি) দিয়ে অ্যারেটিতে একটি নতুন অবজেক্ট যুক্ত না করে?

ধন্যবাদ!


1
বিল এবং টেডের একই আইডি থাকার কথা?
ব্যবহারকারী 2357112 17-18 এ মনিকা

একই সাথে দুটি উপাদান আছে কেন id? এটি কি সম্ভব যে উপাদানগুলি এই অ্যারে থেকে সরানো হবে, বা আমরা নিশ্চিত হতে পারি যে নতুন উপাদানটি সর্বদা idসমান হবে arr.length + 1?
রায়না 77ow

আপনি যদি এটিকে লুপ করতে চান না, তবে অ্যারে প্রোটোটাইপ, স্ট্যাকওভারফ্লো / প্রশ্নগুলি / ১৯৮৮34৪৯৯ / ......... প্রসারিত করার জন্য এই প্রশ্নোত্তরটি দেখুন ।
সেমে Özer

নেটিভ ফাংশনগুলি সাধারণ লুপগুলির তুলনায় ধীর হয় এবং তাদের সমর্থন কিছু ব্রাউজার সংস্করণে সীমাবদ্ধ। নীচে আমার উত্তর চেক করুন।
জহীন

এটি একটি মৌলিকভাবে ভুল প্রশ্ন কারণ আপনি অ্যারে ব্যবহার এড়ানো থেকে এটি করতে পারেন।
বেকিম বাকাজ

উত্তর:


234

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

const arr = [{ id: 1, username: 'fred' }, { id: 2, username: 'bill' }, { id: 3, username: 'ted' }];

function add(arr, name) {
  const { length } = arr;
  const id = length + 1;
  const found = arr.some(el => el.username === name);
  if (!found) arr.push({ id, username: name });
  return arr;
}

console.log(add(arr, 'ted'));


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

3
সাবধান হন যে আইই 8 এবং এর আগে কিছু ফাংশন সমর্থন করে না।
বিটা রাইড

খুঁজে পাওয়া ফাংশন একটি আইএফ তৈরি করা যেতে পারে? এর মতো কিছু: যদি (অরফারসোম (ফাংশন (এল) {এল.আইডি == কিছু আইডি)) এবং এটি উপস্থিত থাকে বা না থাকলে তা সত্য বা মিথ্যা ফিরে আসবে?
স্টিবে ২ay

@stibay, some আছে একটি বুলিয়ান ফিরে যান। foundহয় হয় trueবা falseকলব্যাকের শর্ত পূরণ হয়েছে কিনা তার উপর নির্ভর করে।
অ্যান্ডি

1
: নিশ্চিত ওহ, if (arr.some(function (el) { return el.Id == someId; })) { // do something }। এটি ভুলে যাবেন না returnবা আপনি আর কিছু পাবেন না।
অ্যান্ডি

26

এটি বিদ্যমান ব্যবহারকারীর নাম যাচাই করা বরং তুচ্ছ:

var arr = [{ id: 1, username: 'fred' }, 
  { id: 2, username: 'bill'}, 
  { id: 3, username: 'ted' }];

function userExists(username) {
  return arr.some(function(el) {
    return el.username === username;
  }); 
}

console.log(userExists('fred')); // true
console.log(userExists('bred')); // false

তবে আপনাকে যখন এই অ্যারেটিতে নতুন ব্যবহারকারী যুক্ত করতে হবে তখন কী করা উচিত তা এতটা স্পষ্ট নয়। সবচেয়ে সহজ উপায় - কেবলমাত্র নতুন উপাদানটিকে idসমান দিয়ে চাপানো array.length + 1:

function addUser(username) {
  if (userExists(username)) {
    return false; 
  }
  arr.push({ id: arr.length + 1, username: username });
  return true;
}

addUser('fred'); // false
addUser('bred'); // true, user `bred` added

এটি আইডিগুলির স্বতন্ত্রতার গ্যারান্টি দিবে, তবে কিছু উপাদানগুলির সমাপ্তি বন্ধ হয়ে গেলে এই অ্যারেটিকে কিছুটা অদ্ভুত দেখাবে।


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

18

এই ছোট ছোট স্নিপেটগুলি আমার জন্য কাজ করে ..

const arrayOfObject = [{ id: 1, name: 'john' }, {id: 2, name: 'max'}];

const checkUsername = obj => obj.name === 'max';

console.log(arrayOfObject.some(checkUsername))

1
বরং মার্জিত পদ্ধতির! - এখানে আরও বিশদ এবং উদাহরণ ব্যবহার করে উদাহরণগুলি .someপাওয়া গেছে - developer.mozilla.org/en-US/docs/Web/JavaScript/References/…
জেমস মেরিনো

10

আমি মনে করি, এই সমস্যাটির সমাধানের এটি সবচেয়ে সংক্ষিপ্ততম উপায়। সদ্য যুক্ত হওয়া ব্যবহারকারীর নামটির অস্তিত্ব পরীক্ষা করতে আমি ফিল্টার সহ ES6 তীর ফাংশনটি ব্যবহার করেছি।

var arr = [{
    id: 1,
    username: 'fred'
}, {
    id: 2,
    username: 'bill'
}, {
    id: 3,
    username: 'ted'
}];

function add(name) {
    var id = arr.length + 1;        
            if (arr.filter(item=> item.username == name).length == 0){
            arr.push({ id: id, username: name });
        }
}

add('ted');
console.log(arr);

ফিডল লিঙ্ক


3

@ সাগর-গাভানীর উত্তর ছাড়াও আমি এটি করেছি

const newUser = {_id: 4, name: 'Adam'}
const users = [{_id: 1, name: 'Fred'}, {_id: 2, name: 'Ted'}, {_id: 3, 'Bill'}]

const userExists = users.some(user => user.name = newUser.name);
if(userExists) {
    return new Error({error:'User exists'})
}
users.push(newUser)

হাই, আমি যদি মানটি পাই তবে আমি কীভাবে আইডিটি ব্যবহার করতে পারি?
কুসল কিথমাল

এটি করা সত্যিই সহজ... if(userExists) { const userId = userExists.id return userId; } ...
মাইকেল এনিটান

2

স্বীকৃত উত্তরও .some এ তীর ফাংশন ব্যবহার করে নিম্নলিখিত পদ্ধতিতে লেখা যেতে পারে

 function checkAndAdd(name) {
     var id = arr.length + 1;
     var found = arr.some((el) => {
           return el.username === name;
     });
     if (!found) { arr.push({ id: id, username: name }); }
 }

2

এখানে একটি ES6 পদ্ধতি শৃঙ্খলা রয়েছে .map()এবং .includes():

const arr = [ { id: 1, username: 'fred' }, { id: 2, username: 'bill' }, { id: 2, username: 'ted' } ]

const checkForUser = (newUsername) => {
      arr.map(user => {
        return user.username
      }).includes(newUsername)
    }

if (!checkForUser('fred')){
  // add fred
}
  1. ব্যবহারকারীর স্ট্রিংগুলির অ্যারে তৈরি করতে বিদ্যমান ব্যবহারকারীদের উপরে মানচিত্র।
  2. ব্যবহারকারীর এই অ্যারেটিতে নতুন ব্যবহারকারীর নাম রয়েছে কিনা তা পরীক্ষা করুন
  3. যদি এটি উপস্থিত না থাকে তবে নতুন ব্যবহারকারী যুক্ত করুন

1

আমি অ্যান্ডির উত্তরটি পছন্দ করি, তবে আইডিটি অগত্যা অনন্য হতে পারে না, তাই আমি একটি অনন্য আইডি তৈরি করতে এখানে এসেছি। জেসফিডেলেও চেক করা যায়। দয়া করে নোট করুন যে arr.length + 1কোনও কিছু আগে সরিয়ে ফেলা থাকলে খুব ভাল কোনও অনন্য আইডির গ্যারান্টি দিতে পারে না।

var array = [ { id: 1, username: 'fred' }, { id: 2, username: 'bill' }, { id: 3, username: 'ted' } ];
var usedname = 'bill';
var newname = 'sam';

// don't add used name
console.log('before usedname: ' + JSON.stringify(array));
tryAdd(usedname, array);
console.log('before newname: ' + JSON.stringify(array));
tryAdd(newname, array);
console.log('after newname: ' + JSON.stringify(array));

function tryAdd(name, array) {
    var found = false;
    var i = 0;
    var maxId = 1;
    for (i in array) {
        // Check max id
        if (maxId <= array[i].id)
            maxId = array[i].id + 1;

        // Don't need to add if we find it
        if (array[i].username === name)
            found = true;
    }

    if (!found)
        array[++i] = { id: maxId, username: name };
}

আমি অন্যান্য উত্তরের সরলতা পছন্দ করি, আমি কেবল অনন্য আইডির জন্য চেক যুক্ত করতে আমার পোস্ট করেছি
ইউক্সনিথ

আপনার উত্তরটি অক্সনিথের জন্য ধন্যবাদ। এই মুহুর্তে আমার কাছে অনন্য আইডির দরকার নেই কারণ আমি ব্যবহারকারীদের অ্যারে থেকে সরিয়ে দেব না। প্রয়োজন দেখা দিলে আমি এই রেজোলিউশনটি আমার পিছনের পকেটে রাখব। আবার ধন্যবাদ
ব্যবহারকারী 2576960

1

আপনি আপনার অ্যারেটিকে আরও মডুলার করতে প্রোটোটাইপ করতে পারেন, এরকম কিছু চেষ্টা করুন

    Array.prototype.hasElement = function(element) {
        var i;
        for (i = 0; i < this.length; i++) {
            if (this[i] === element) {
                return i; //Returns element position, so it exists
            }
        }

        return -1; //The element isn't in your array
    };

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

 yourArray.hasElement(yourArrayElement)

1

আমি উপরের পদক্ষেপগুলি কিছু কারণে চেষ্টা করেছি যে এটি আমার জন্য কাজ করবে না তবে এটি আমার নিজের সমস্যার চূড়ান্ত সমাধান যা এটি পড়ার যে কারও পক্ষে সহায়ক হতে পারে:

let pst = post.likes.some( (like) => {  //console.log(like.user, req.user.id);
                                     if(like.user.toString() === req.user.id.toString()){
                                         return true
                                     } } )

এখানে post.likes এমন একটি ব্যবহারকারী যা একটি পোস্ট পছন্দ করেছে ar


1

এটা চেষ্টা কর

প্রথম কিছু ব্যবহার করে

  let arr = [{ id: 1, username: 'fred' }, { id: 2, username: 'bill' }, { id: 3, username: 'ted' }];
    let found = arr.some(ele => ele.username === 'bill');
    console.log(found)

দ্বিতীয় পদ্ধতি ব্যবহার করে, মানচিত্র অন্তর্ভুক্ত

   let arr = [{ id: 1, username: 'fred' }, { id: 2, username: 'bill' }, { id: 3, username: 'ted' }];
    let mapped = arr.map(ele => ele.username);
    let found = mapped.includes('bill');
    console.log(found)

আমি যদি objects "নাম": "টেস্ট 1", "বয়স": 30 like এর মতো 2 টি বৈশিষ্ট্যের সাথে অবজেক্টগুলিকে তুলনা করতে চাই তবে কী হবে?
অনুমান

1

ধরে নেওয়া যাক আমাদের কাছে একটি অবজেক্টের অ্যারে রয়েছে এবং আপনি নামের মানটি এভাবে সংজ্ঞায়িত করা হয়েছে কিনা তা পরীক্ষা করতে চান,

let persons = [ {"name" : "test1"},{"name": "test2"}];

if(persons.some(person => person.name == 'test1')) {
    ... here your code in case person.name is defined and available
}

আপনার কোডটি কী করছে তা ব্যাখ্যা করার জন্য দয়া করে কয়েকটি বাক্য যুক্ত করুন, যাতে আপনি নিজের উত্তরের জন্য আরও বেশি প্রস্তাব পেতে পারেন।
অস্পষ্ট বিশ্লেষণ

আমি যদি objects "নাম": "টেস্ট 1", "বয়স": 30 like এর মতো 2 টি বৈশিষ্ট্যের সাথে অবজেক্টগুলিকে তুলনা করতে চাই তবে কী হবে?
অনুমান

0

অ্যারের নেটিভ ফাংশনগুলি কখনও কখনও স্বাভাবিক লুপগুলির চেয়ে 3 এক্স - 5 এক্স গতি কম হয়। প্লাস নেটিভ ফাংশনগুলি সমস্ত ব্রাউজারে কাজ করবে না যাতে সামঞ্জস্যের সমস্যা রয়েছে।

আমার কোড:

<script>
  var obj = [];

  function checkName(name) {
    // declarations
    var flag = 0;
    var len = obj.length;   
    var i = 0;
    var id = 1;

    // looping array
    for (i; i < len; i++) {
        // if name matches
        if (name == obj[i]['username']) {
            flag = 1;
            break;
        } else {
            // increment the id by 1
            id = id + 1;
        }
    }

    // if flag = 1 then name exits else push in array
    if (flag == 0) {
      // new entry push in array        
      obj.push({'id':id, 'username': name});
    }
  }
  // function end

  checkName('abc');
</script>

এইভাবে আপনি দ্রুত ফলাফল অর্জন করতে পারেন।

দ্রষ্টব্য: আমি প্যারামিটারটি পাস হয়েছে কিনা তা খালি আছে কিনা তা পরীক্ষা করে দেখিনি, আপনি চাইলে এটিতে একটি চেক রাখতে পারেন বা নির্দিষ্ট বৈধতার জন্য একটি নিয়মিত অভিব্যক্তি লিখতে পারেন।


0

xorWith লোড্যাশ এ অর্জন করতে ব্যবহার করা যেতে পারে

let objects = [ { id: 1, username: 'fred' }, { id: 2, username: 'bill' }, { id: 2, username: 'ted' } ]
let existingObject = { id: 1, username: 'fred' };
let newObject = { id: 1729, username: 'Ramanujan' }

_.xorWith(objects, [existingObject], _.isEqual)
// returns [ { id: 2, username: 'bill' }, { id: 2, username: 'ted' } ]

_.xorWith(objects, [newObject], _.isEqual)
// returns [ { id: 1, username: 'fred' }, { id: 2, username: 'bill' }, { id: 2, username: 'ted' } ,{ id: 1729, username: 'Ramanujan' } ]


0

ফাংশন সংখ্যা_প্রেসেন্ট_অর_নোট () var arr = [ 2,5,9,67,78,8,454,4,6,79,64,688 ] ; found var পাওয়া = 6; var found_two; (i = 0; i) এর জন্য

    }
    if ( found_two == found )
    {
        console.log("number present in the array");
    }
    else
    {
        console.log("number not present in the array");
    }
}

-1

সেরা অনুশীলনটি এরকম।

var arr = ["a","b","c","d"];
console.log(arr.includes("a")); //---- true;
console.log(arr.includes("k")); //---- false;
console.log(arr.includes("c")); //---- true;

18
প্রশ্নটি বস্তুর অ্যারে সম্পর্কে এবং এটি কাজ করবে না।
অ্যাড্রিয়ান এনরিকিউজ

এটি প্রশ্নের উত্তর নেই।
আহসান মুখতার

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