জাভাস্ক্রিপ্টে সেটগুলি নকল করছেন?


220

আমি জাভাস্ক্রিপ্টে কাজ করছি। আমি নিম্নলিখিত বৈশিষ্ট্য সহ অনন্য , আনর্ডারড স্ট্রিং মানগুলির একটি তালিকা সঞ্চয় করতে চাই :

  1. 'তালিকার মধ্যে কী' জিজ্ঞাসা করার দ্রুত উপায়?
  2. 'তালিকায় এটি উপস্থিত থাকলে তালিকা থেকে এ মুছুন' করার একটি দ্রুত উপায়
  3. 'তালিকায় এটি ইতিমধ্যে উপস্থিত না থাকলে' যুক্ত করার একটি দ্রুত উপায়।

আমি আসলে যা চাই তা একটি সেট। জাভাস্ক্রিপ্টে কোনও সেট নকল করার সর্বোত্তম উপায়ে কোনও পরামর্শ?

এই প্রশ্নটি কী সংরক্ষণের বৈশিষ্ট্য এবং মানগুলি সত্য হিসাবে সেট করে একটি অবজেক্ট ব্যবহার করার পরামর্শ দেয়: এটি কি কোনও বোধগম্য উপায়?



উত্তর:


262

আপনি যদি কোনও ES6- সক্ষম পরিবেশে প্রোগ্রামিং করছেন (যেমন নোড.জেএস, আপনার প্রয়োজনীয় ES6 ক্ষমতা সহ একটি নির্দিষ্ট ব্রাউজার বা আপনার পরিবেশের জন্য ES6 কোডটি স্থানান্তর করছেন) তবে আপনি SetES6 তে অন্তর্নির্মিত অবজেক্টটি ব্যবহার করতে পারেন । এটিতে খুব সুন্দর ক্ষমতা রয়েছে এবং এটি আপনার পরিবেশে ঠিক যেমন ব্যবহার করা যায়।


ES5 পরিবেশে অনেকগুলি সাধারণ জিনিসের জন্য, অবজেক্ট ব্যবহার করা খুব ভাল কাজ করে। যদি objআপনার অবজেক্ট হয় এবং Aকোনও ভেরিয়েবলের মান রয়েছে যা আপনি সেটটিতে পরিচালনা করতে চান তবে এটি আপনি করতে পারেন:

সূচনা কোড:

// create empty object
var obj = {};

// or create an object with some items already in it
var obj = {"1":true, "2":true, "3":true, "9":true};

প্রশ্ন 1: Is Aতালিকায়:

if (A in obj) {
    // put code here
}

প্রশ্ন 2: তালিকা থেকে 'এ' মুছুন যদি তা সেখানে থাকে:

delete obj[A];

প্রশ্ন 3: তালিকাটিতে 'এ' যুক্ত করুন যদি এটি ইতিমধ্যে না থাকে

obj[A] = true;

সম্পূর্ণতার জন্য, Aতালিকায় রয়েছে কিনা এর জন্য পরীক্ষাটি এটির সাথে কিছুটা নিরাপদ:

if (Object.prototype.hasOwnProperty.call(obj, A))
    // put code here
}

কারণ constructorসম্পত্তি হিসাবে বেস অবজেক্টে এবং / বা বৈশিষ্ট্যগুলির মধ্যে অন্তর্নির্মিত সম্ভাব্য দ্বন্দ্ব ।


ES6 এর সাইডবার: ECMAScript 6 বা ES 2015 নামক কিছু কিছু বর্তমান সংস্করণে একটি বিল্ট-ইন সেট অবজেক্ট রয়েছে । এটি এখন কয়েকটি ব্রাউজারে প্রয়োগ করা হয়েছে। যেহেতু ব্রাউজার প্রাপ্যতা সময়ের সাথে পরিবর্তিত হয়ে আপনি লাইন তাকান জন্য করতে Setমধ্যে এই ES6 সামঞ্জস্য টেবিল ব্রাউজার প্রাপ্যতা জন্য বর্তমান অবস্থা দেখতে।

অন্তর্নির্মিত সেট অবজেক্টের একটি সুবিধা হ'ল এটি হ'ল অবজেক্টের মতো স্ট্রিংয়ের সমস্ত কীগুলিকে বাধ্য করে না তাই আপনার পৃথক কী হিসাবে 5 এবং "5" উভয়ই থাকতে পারে। এবং আপনি এমনকি স্ট্রিং রূপান্তর ছাড়াই অবজেক্টগুলিকে সেটে সরাসরি ব্যবহার করতে পারেন। এখানে একটি নিবন্ধ যা কিছু কিছু দক্ষতা এবং সেট অবজেক্টে MDN এর ডকুমেন্টেশন বর্ণনা করে।

আমি এখন ES6 সেট অবজেক্টের জন্য একটি পলিফিল লিখেছি যাতে আপনি এখনই এটি ব্যবহার শুরু করতে পারেন এবং ব্রাউজার সমর্থন করলে এটি স্বয়ংক্রিয়ভাবে বিল্ট-ইন সেট অবজেক্টের কাছে পিছিয়ে যাবে। এটির সুবিধা রয়েছে যে আপনি ES6 সাথে সামঞ্জস্যপূর্ণ কোড লিখছেন যা আইই 7-তে ফিরে সমস্তরকম কাজ করবে। তবে, কিছুটা ডাউনসাইড রয়েছে। ES6 সেট ইন্টারফেস ES6 for (item of mySet)পুনরাবৃত্তির সুবিধা গ্রহণ করে যাতে আপনি এর মতো কাজ করতে পারেন এবং এটি স্বয়ংক্রিয়ভাবে আপনার জন্য সেটটির মাধ্যমে পুনরাবৃত্তি হবে। তবে, এই জাতীয় ভাষার বৈশিষ্ট্যটি পলিফিলের মাধ্যমে প্রয়োগ করা যায় না। আপনি এখনও নতুন ES6 ভাষা বৈশিষ্ট্যগুলি ব্যবহার না করে একটি ES6 সেটটি পুনরাবৃত্তি করতে পারেন, তবে নতুন ভাষার বৈশিষ্ট্যগুলি ছাড়াই, এটি নীচে অন্তর্ভুক্ত অন্যান্য সেট ইন্টারফেসের মতো সুবিধাজনক নয়।

উভয়টি দেখার পরে কোনটি আপনার পক্ষে সবচেয়ে ভাল কাজ করে তা আপনি সিদ্ধান্ত নিতে পারেন। ES6 সেট পলফিলটি এখানে রয়েছে: https://github.com/jfriend00/ES6- সেট ।

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


প্রাক-বিল্ট সেট অবজেক্টস: আপনি যদি এমন কোনও পূর্বনির্মাণ বস্তু চান যা আপনি যে কোনও ব্রাউজারে ব্যবহার করতে পারেন এমন কোনও সেটে অপারেটিংয়ের জন্য পদ্ধতি রয়েছে তবে আপনি বিভিন্ন প্রাক-বিল্ট অবজেক্টের একটি সিরিজ ব্যবহার করতে পারেন যা বিভিন্ন ধরণের সেট প্রয়োগ করে। একটি মিনিসেট রয়েছে যা একটি ছোট কোড যা একটি সেট অবজেক্টের বেসিকগুলি প্রয়োগ করে। এটিতে আরও একটি বৈশিষ্ট্য সমৃদ্ধ সেট অবজেক্ট এবং একটি অভিধান সহ একাধিক উপকরণ রয়েছে (আসুন আপনি প্রতিটি কীটির জন্য একটি মান সংরক্ষণ / পুনরুদ্ধার করতে পারেন) এবং একটি অবজেক্টসেট (যাক আপনি বস্তুর একটি সেট রাখুন - হয় জেএস অবজেক্ট বা ডিওএম অবজেক্ট যেখানে আপনি সরবরাহ করেন সেখানে ফাংশন যা প্রত্যেকের জন্য একটি অনন্য কী উত্পন্ন করে বা অবজেক্টসটি আপনার জন্য কী উত্পন্ন করবে)।

এখানে miniSet কোড একটি কপি (অধিকাংশ আপ-টু-ডেট কোড হয় GitHub এখানে )।

"use strict";
//-------------------------------------------
// Simple implementation of a Set in javascript
//
// Supports any element type that can uniquely be identified
//    with its string conversion (e.g. toString() operator).
// This includes strings, numbers, dates, etc...
// It does not include objects or arrays though
//    one could implement a toString() operator
//    on an object that would uniquely identify
//    the object.
// 
// Uses a javascript object to hold the Set
//
// This is a subset of the Set object designed to be smaller and faster, but
// not as extensible.  This implementation should not be mixed with the Set object
// as in don't pass a miniSet to a Set constructor or vice versa.  Both can exist and be
// used separately in the same project, though if you want the features of the other
// sets, then you should probably just include them and not include miniSet as it's
// really designed for someone who just wants the smallest amount of code to get
// a Set interface.
//
// s.add(key)                      // adds a key to the Set (if it doesn't already exist)
// s.add(key1, key2, key3)         // adds multiple keys
// s.add([key1, key2, key3])       // adds multiple keys
// s.add(otherSet)                 // adds another Set to this Set
// s.add(arrayLikeObject)          // adds anything that a subclass returns true on _isPseudoArray()
// s.remove(key)                   // removes a key from the Set
// s.remove(["a", "b"]);           // removes all keys in the passed in array
// s.remove("a", "b", ["first", "second"]);   // removes all keys specified
// s.has(key)                      // returns true/false if key exists in the Set
// s.isEmpty()                     // returns true/false for whether Set is empty
// s.keys()                        // returns an array of keys in the Set
// s.clear()                       // clears all data from the Set
// s.each(fn)                      // iterate over all items in the Set (return this for method chaining)
//
// All methods return the object for use in chaining except when the point
// of the method is to return a specific value (such as .keys() or .isEmpty())
//-------------------------------------------


// polyfill for Array.isArray
if(!Array.isArray) {
    Array.isArray = function (vArg) {
        return Object.prototype.toString.call(vArg) === "[object Array]";
    };
}

function MiniSet(initialData) {
    // Usage:
    // new MiniSet()
    // new MiniSet(1,2,3,4,5)
    // new MiniSet(["1", "2", "3", "4", "5"])
    // new MiniSet(otherSet)
    // new MiniSet(otherSet1, otherSet2, ...)
    this.data = {};
    this.add.apply(this, arguments);
}

MiniSet.prototype = {
    // usage:
    // add(key)
    // add([key1, key2, key3])
    // add(otherSet)
    // add(key1, [key2, key3, key4], otherSet)
    // add supports the EXACT same arguments as the constructor
    add: function() {
        var key;
        for (var i = 0; i < arguments.length; i++) {
            key = arguments[i];
            if (Array.isArray(key)) {
                for (var j = 0; j < key.length; j++) {
                    this.data[key[j]] = key[j];
                }
            } else if (key instanceof MiniSet) {
                var self = this;
                key.each(function(val, key) {
                    self.data[key] = val;
                });
            } else {
                // just a key, so add it
                this.data[key] = key;
            }
        }
        return this;
    },
    // private: to remove a single item
    // does not have all the argument flexibility that remove does
    _removeItem: function(key) {
        delete this.data[key];
    },
    // usage:
    // remove(key)
    // remove(key1, key2, key3)
    // remove([key1, key2, key3])
    remove: function(key) {
        // can be one or more args
        // each arg can be a string key or an array of string keys
        var item;
        for (var j = 0; j < arguments.length; j++) {
            item = arguments[j];
            if (Array.isArray(item)) {
                // must be an array of keys
                for (var i = 0; i < item.length; i++) {
                    this._removeItem(item[i]);
                }
            } else {
                this._removeItem(item);
            }
        }
        return this;
    },
    // returns true/false on whether the key exists
    has: function(key) {
        return Object.prototype.hasOwnProperty.call(this.data, key);
    },
    // tells you if the Set is empty or not
    isEmpty: function() {
        for (var key in this.data) {
            if (this.has(key)) {
                return false;
            }
        }
        return true;
    },
    // returns an array of all keys in the Set
    // returns the original key (not the string converted form)
    keys: function() {
        var results = [];
        this.each(function(data) {
            results.push(data);
        });
        return results;
    },
    // clears the Set
    clear: function() {
        this.data = {}; 
        return this;
    },
    // iterate over all elements in the Set until callback returns false
    // myCallback(key) is the callback form
    // If the callback returns false, then the iteration is stopped
    // returns the Set to allow method chaining
    each: function(fn) {
        this.eachReturn(fn);
        return this;
    },
    // iterate all elements until callback returns false
    // myCallback(key) is the callback form
    // returns false if iteration was stopped
    // returns true if iteration completed
    eachReturn: function(fn) {
        for (var key in this.data) {
            if (this.has(key)) {
                if (fn.call(this, this.data[key], key) === false) {
                    return false;
                }
            }
        }
        return true;
    }
};

MiniSet.prototype.constructor = MiniSet;

16
এটি প্রশ্নের সমাধান করে, তবে স্পষ্ট করে বলতে গেলে, এই বাস্তবায়নটি পূর্ণসংখ্যা বা স্ট্রিং ছাড়াও কয়েকটি সেটগুলির জন্য কাজ করবে না
mkirk

3
@ এমকির্ক - হ্যাঁ আপনি যে আইটেমটি সেটে সূচনা করছেন সেটি অবশ্যই একটি স্ট্রিং উপস্থাপনা থাকতে হবে যা সূচি কী হতে পারে (যেমন এটি স্ট্রিং বা একটি স্ট্রিং () পদ্ধতি রয়েছে যা আইটেমটি স্বতন্ত্রভাবে বর্ণনা করে)।
jਫਰ00

4
তালিকায় আইটেমগুলি পেতে, আপনি ব্যবহার করতে পারেন Object.keys(obj)
Blixt

3
@ ব্লিক্স্ট - আইই 9 Object.keys(), এফএফ 4, সাফারি 5, অপেরা 12 বা তার বেশি প্রয়োজন। সেখানে পুরোনো ব্রাউজারে একটি polyfill এর এখানে
jਫਰ00

1
obj.hasOwnProperty(prop)সদস্যপদ পরীক্ষার জন্য ব্যবহার করবেন না । Object.prototype.hasOwnProperty.call(obj, prop)পরিবর্তে ব্যবহার করুন, যা "সেট" মান থাকা সত্ত্বেও কাজ করে "hasOwnProperty"
ডেভিডচাম্বার

72

আপনি যেমন কোনও বৈশিষ্ট্য সহ একটি অবজেক্ট তৈরি করতে পারেন

var set = Object.create(null)

যা একটি সেট হিসাবে কাজ করতে পারে এবং ব্যবহারের প্রয়োজনীয়তা দূর করে hasOwnProperty


var set = Object.create(null); // create an object with no properties

if (A in set) { // 1. is A in the list
  // some code
}
delete set[a]; // 2. delete A from the list if it exists in the list 
set[A] = true; // 3. add A to the list if it is not already present

চমৎকার, তবে আপনি কেন এটি বলছেন তা নিশ্চিত নয় "
ন্যাশনাল

13
আপনি শুধু ব্যবহার করেন তাহলে set = {}এটা অবজেক্ট (উদাহরণ থেকে সব সম্পত্তি উত্তরাধিকার লাভ করবে toString), তাই আপনি সেটের পে লোড জন্য (বৈশিষ্ট্য জুড়েছে) সঙ্গে চেক করতে হবে hasOwnPropertyযেif (A in set)
Thorben Croisé

6
আমি জানতাম না যে সম্পূর্ণ শূন্য বস্তু তৈরি করা সম্ভব। ধন্যবাদ, আপনার সমাধানটি খুব মার্জিত।
ব্লুফাস্ট

1
আকর্ষণীয়, তবে এর খারাপ দিকটি অবশ্যই এটি যে আপনি set[A]=trueকেবলমাত্র একটি প্রাথমিকের পরিবর্তে যুক্ত করতে ইচ্ছুক প্রতিটি উপাদানগুলির বিবৃতি থাকতে হবে?
ভোগোম্যাটিক্স

1
আপনি কী বলতে চাইছেন তা নিশ্চিত নয় তবে আপনি যদি ইতিমধ্যে একটি বিদ্যমান সেট দ্বারা সেটটি শুরু করার কথা উল্লেখ করছেন তবে আপনিs = Object.create(null);s["thorben"] = true;ss = Object.create(s)
থোরবেন ক্রয়ে

23

ECMAScript 6 হিসাবে, সেট ডেটা-কাঠামো একটি অন্তর্নির্মিত বৈশিষ্ট্য । নোড.জেএস সংস্করণগুলির সাথে সামঞ্জস্যতা এখানে পাওয়া যাবে


4
হ্যালো, কেবল স্পষ্টতার জন্য - এখন 2014, এটি কি ক্রোমে এখনও পরীক্ষামূলক? যদি এটি না হয়, আপনি দয়া করে আপনার উত্তর সম্পাদনা করতে পারেন? ধন্যবাদ
ক্যারেল বালেক

1
হ্যাঁ, এটি ক্রোমের জন্য এখনও পরীক্ষামূলক। আমি বিশ্বাস করি যে ২০১৪ সালের শেষের দিকে, যখন ইসিএমএসক্রিপ্টটি 'আনুষ্ঠানিকভাবে' প্রকাশের কথা রয়েছে, তখন এটি সমর্থন করবে। আমি তারপরে আমার উত্তরটি আপডেট করব।
hyMLoth

ঠিক আছে, উত্তর দেওয়ার জন্য ধন্যবাদ! (জাভাস্ক্রিপ্টের উত্তরগুলি খুব তাড়াতাড়ি পুরানো হয়ে যায়))
কারেল বালেক

1
@ ভাল inকাজ করে না কারণ Setবস্তুর বৈশিষ্ট্য হিসাবে উপাদান নেই, যা খারাপ হবে কারণ সেটে যে কোনও ধরণের উপাদান থাকতে পারে তবে বৈশিষ্ট্যগুলি স্ট্রিং। আপনি ব্যবহার করতে পারেন has:Set([1,2]).has(1)
ওরিওল


14

জাভাস্ক্রিপ্টের ES6 সংস্করণে আপনি সেটটির জন্য টাইপ করেছেন ( আপনার ব্রাউজারের সাথে সামঞ্জস্যতা পরীক্ষা করুন )।

var numbers = new Set([1, 2, 4]); // Set {1, 2, 4}

করার একটি উপাদান যোগ সেট আপনি কেবল ব্যবহার করতে .add()যা চালায়, O(1)এবং হয় যোগ করা সেটে উপাদান (যদি এটি বিদ্যমান নয়) অথবা এটি ইতিমধ্যেই আছে কিছুই করে না। আপনি সেখানে যে কোনও প্রকারের উপাদান যুক্ত করতে পারেন (অ্যারে, স্ট্রিং, সংখ্যা)

numbers.add(4); // Set {1, 2, 4}
numbers.add(6); // Set {1, 2, 4, 6}

করার উপাদানের সংখ্যা পরীক্ষা সেট, আপনি কেবল ব্যবহার করতে পারেন .size। এছাড়াও চালায়O(1)

numbers.size; // 4

করতে সেট থেকে উপাদান অপসারণ ব্যবহার .delete()। মানটি যদি উপস্থিত থাকে (এবং অপসারণ করা হয়েছিল), এবং মানটি না থাকলে মিথ্যা হয়। এছাড়াও চালায় O(1)

numbers.delete(2); // true
numbers.delete(2); // false

উপাদানটি কোনও সেট ব্যবহারে উপস্থিত রয়েছে কিনা তা যাচাই করতে হবে .has(), যদি উপাদানটি সেটে থাকে এবং অন্যথায় মিথ্যা থাকে তা সত্য হয়। এছাড়াও চালায় O(1)

numbers.has(3); // false
numbers.has(1); // true

আপনি যে পদ্ধতিগুলি চেয়েছিলেন তা ছাড়াও কয়েকটি অতিরিক্ত অতিরিক্ত রয়েছে:

  • numbers.clear(); সেট থেকে সমস্ত উপাদান সরিয়ে ফেলবে
  • numbers.forEach(callback); সন্নিবেশ ক্রমের মানগুলির মাধ্যমে পুনরাবৃত্তি করা
  • numbers.entries(); সমস্ত মানগুলির একটি পুনরাবৃত্তি তৈরি করুন
  • numbers.keys(); সেটটির কীগুলি একই হিসাবে প্রদান করে numbers.values()

এছাড়াও একটি ওয়াকসেট রয়েছে যা কেবলমাত্র বস্তুর ধরণের মান যুক্ত করতে দেয় allows


আপনি .add()ও (1) রানের কোনও রেফারেন্স নির্দেশ করতে পারেন ? আমি এতে আগ্রহী,
সবুজ

10

আমি সেটের একটি বাস্তবায়ন শুরু করেছি যা বর্তমানে সংখ্যা এবং স্ট্রিংয়ের সাথে বেশ ভাল কাজ করে। আমার মূল ফোকাস ছিল ডিফারেন্স অপারেশন, তাই আমি এটিকে যতটা সম্ভব দক্ষ করার চেষ্টা করেছি। কাঁটাচামচ এবং কোড পর্যালোচনা স্বাগত!

https://github.com/mcrisc/SetJS


বাহ এই শ্রেণি বাদাম! আমি কাউচডিবি মানচিত্রের ভিতরে জাভাস্ক্রিপ্ট না লিখলে / ফাংশন হ্রাস না করে আমি এটি পুরোপুরি ব্যবহার করব!
Portforwardpodcast

9

আমি কেবল লক্ষ্য করেছি যে d3.js লাইব্রেরিতে সেট, মানচিত্র এবং অন্যান্য ডেটা স্ট্রাকচারের প্রয়োগ রয়েছে। আমি তাদের দক্ষতা নিয়ে তর্ক করতে পারি না তবে এটি একটি জনপ্রিয় লাইব্রেরি হওয়ায় এটি আপনার প্রয়োজনের হতে হবে তা বিচার করে।

ডকুমেন্টেশন এখানে

সুবিধার জন্য আমি লিঙ্কটি থেকে অনুলিপি করছি (প্রথম 3 টি ফাংশন হ'ল আগ্রহী)


  • d3.set ([অ্যারের])

একটি নতুন সেট তৈরি করে। অ্যারে নির্দিষ্ট করা থাকলে, প্রদত্ত অ্যারেটিতে স্ট্রিং মানগুলির প্রদত্ত অ্যারে যুক্ত করে।

  • set.has (মান)

যদি এই সেটটিতে নির্দিষ্ট মান স্ট্রিংয়ের জন্য একটি এন্ট্রি থাকে তবেই সত্যটি প্রত্যাবর্তন করে।

  • set.add (মান)

এই সেটটিতে নির্দিষ্ট মান স্ট্রিং যুক্ত করে।

  • set.remove (মান)

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

  • set.values ​​()

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

d3.set (["foo", "বার", "foo", "বাজ"])। মান (); // "ফু", "বার", "বাজ"

  • set.forEach (ফাংশন)

এই সেটের প্রতিটি মানের জন্য নির্দিষ্ট ফাংশন কল করে মানটিকে একটি আর্গুমেন্ট হিসাবে পাস করে। ফাংশনের প্রসঙ্গটি এই সেট। অপরিবর্তিত ফেরত দেয়। পুনরাবৃত্তির ক্রমটি নির্বিচারে।

  • set.empty ()

যদি এই সেটটির শূন্য মান থাকে তবেই এবং যদি সত্য হয়।

  • set.size ()

এই সেটে মানগুলির সংখ্যা প্রদান করে।


4

হ্যাঁ, এটি একটি বোধগম্য উপায় - এটি সমস্ত বস্তু (ভাল, এই ব্যবহারের ক্ষেত্রে) - সরাসরি অ্যাক্সেস সহ একাধিক চাবি / মান।

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

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