জাভাস্ক্রিপ্ট অ্যারে সেট করতে


144

এমএসডিএন জাভাস্ক্রিপ্টের সেট সংগ্রহ বিমূর্ততা উল্লেখ করে । আমার কাছে এমন একটি অবজেক্টের অ্যারে রয়েছে যা আমি একটি সেটে রূপান্তর করতে চাই যাতে .delete()নাম ( ) দ্বারা বিভিন্ন উপাদান মুছে ফেলতে সক্ষম হয়েছি :

var array = [
    {name: "malcom", dogType: "four-legged"},
    {name: "peabody", dogType: "three-legged"},
    {name: "pablo", dogType: "two-legged"}
];

আমি কীভাবে এই অ্যারেটিকে একটি সেটে রূপান্তর করব? আরও সুনির্দিষ্টভাবে, উপরের অ্যারেটির উপরে পুনরাবৃত্তি না করে এটি করা কি সম্ভব? ডকুমেন্টেশনের তুলনামূলকভাবে অভাব রয়েছে (তাড়াতাড়ি সেটগুলির জন্য পর্যাপ্ত; রূপান্তরগুলির জন্য নয় - সম্ভব হলে)।

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

চূড়ান্ত লক্ষ্য হওয়ায় একটি অ্যারে থেকে অন্যে রূপান্তর।


1
সরল পুরানো অবজেক্ট আপনার জন্য কাজ করবে বলে মনে হচ্ছে ...
ডান্ডাভিস

3
@ থমাস: সুতরাং আমি এমন কিছু মিস করছি, যা আমি শিখতে চাই। Var s = new সেট (), অবজেক্ট যুক্ত করা এবং s.delete (যাই হোক না কেন) ইস্যু করার মধ্যে পার্থক্য কী - এবং var o = {1: 'aaa', 2: 'bbbb' ...} এবং মুছুন (o [ '1'])?
ভিভারকে

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

2
এই অ্যারে অবজেক্টটি {"bob", "dole"}বৈধ নয় , যেহেতু কোনও বৈধ অবজেক্ট নয়।
আলনিটাক

1
@ ভিভারকে ইএস Setand এবং Mapসেই তথ্য নির্মাতাদের "খাঁটি" বাস্তবায়ন যা এই বিষয়গুলিকে ভোগ করে না যে Objectজিনিসগুলি যখন তার প্রোটোটাইপে যুক্ত করা যায় তখন।
Alnitak

উত্তর:


203

অ্যারেটি কেবল সেট কনস্ট্রাক্টরের কাছে পাস করুন। সেট কনস্ট্রাক্টর একটি iterableপরামিতি গ্রহণ করে । অ্যারে অবজেক্টটি iterableপ্রোটোকল প্রয়োগ করে , তাই এটির একটি বৈধ প্যারামিটার।

var arr = [55, 44, 65];
var set = new Set(arr);
console.log(set.size === arr.length);
console.log(set.has(65));

এখানে দেখো


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

10
এটি আই 11 এ কাজ করে না। এটি এই নির্মাণকারীকে সমর্থন করে না। আপনার ব্যবহারকারীরা কোন ব্রাউজার ব্যবহার করছেন তা না জানলে আমি এড়াতে চাই।
এরিক

10

আপনি যদি এটি দিয়ে শুরু করেন:

let array = [
    {name: "malcom", dogType: "four-legged"},
    {name: "peabody", dogType: "three-legged"},
    {name: "pablo", dogType: "two-legged"}
];

এবং আপনি নামের একটি সেট চান, আপনি যা করবেন:

let namesSet = new Set(array.map(item => item.name));

3

কি লেভি বলেন এটা কন্সট্রাকটর মধ্যে ক্ষণস্থায়ী সম্পর্কে সঠিক, কিন্তু আপনি একটি বস্তু ব্যবহার করতে পারে।

আমার মনে হয় ভিভারকে যা বলার চেষ্টা করছে তা হ'ল আপনি একই প্রভাবটি অর্জন করতে কোনও বস্তুর deleteকীওয়ার্ডটি সহজেই ব্যবহার করতে পারেন ।

আমি মনে করি আপনি পরিভাষা দ্বারা বিভ্রান্ত; বৈশিষ্ট্যগুলি সেই অবজেক্টের উপাদান যা আপনি নামযুক্ত সূচক হিসাবে ব্যবহার করতে পারেন (যদি আপনি এটি সেভাবে ভাবতে চান)।

এরকম কিছু চেষ্টা করুন:

var obj = {
    "bob": "dole",
    "mr.": "peabody",
    "darkwing": "duck"
};

তারপরে, আপনি কেবল এটি করতে পারেন:

delete obj["bob"];

বস্তুর কাঠামো তখন এটি হবে:

{
    "mr.": "peabody",
    "darkwing": "duck"
}

যার একই প্রভাব রয়েছে।


1
ধন্যবাদ অ্যাস্ট্রো :-)। প্রকৃতপক্ষে, এই প্রশ্নটি খোলে: "একটি সেট অবজেক্ট এবং একটি সরল বস্তুর মধ্যে পার্থক্য কী"? যদিও, আমি উপরের মন্তব্যে যেমনটি উল্লেখ করেছি, "সেট" হ'ল একটি র‌্যাপ আপ টাইপ যা "ক্লিয়ার" এর "কার্যকারিতা থাকতে সুন্দর" অফার করে।
ভিভারকে

সংক্ষেপে, আমি মনে করি পোস্টটির শিরোনামটি "জাভাস্ক্রিপ্টে একটি সেট অবজেক্ট এবং একটি সরল বস্তুর মধ্যে পার্থক্য কী" হিসাবে পরিবর্তন করা উচিত, এবং নোট করুন যে "এটি এবং এটি অর্জন করার চেষ্টা করার পরে ... আমি নিজেকে জিজ্ঞাসা করে শেষ করেছি এর মধ্যে পার্থক্য কী ...
বেভারকে

@ ভিভারকে "একটি সেট অবজেক্ট এবং একটি সরল বস্তুর মধ্যে পার্থক্য কী", ডকটি কেবল পড়তে পারত ..
হ্যাক্কেটো

1
@ হ্যাক্টো: আপনি কি তার এপিআইতে "ক্লিয়ার" সরবরাহ করা সেট ব্যতীত অন্য কোনওটি খুঁজে পান?
ভিভারকে

1
এটি একটি আকর্ষণীয় উত্তর - মনে করুন এটি যতটা পেয়েছে তার চেয়ে বেশি ক্রেডিট প্রদান করে। আমাকে ভাবিয়েছে। ধন্যবাদ!
থমাস

2

সংজ্ঞা অনুসারে "একটি সেট হ'ল মানগুলির সংগ্রহ, যেখানে প্রতিটি মান কেবল একবারে ঘটতে পারে।" সুতরাং, আপনার অ্যারের যদি বারবার মান থাকে তবে পুনরাবৃত্ত মানগুলির মধ্যে কেবল একটি মান আপনার সেটে যুক্ত হবে।

var arr = [1, 2, 3];
var set = new Set(arr);
console.log(set); // {1,2,3}


var arr = [1, 2, 1];
var set = new Set(arr);
console.log(set); // {1,2}

সুতরাং, আপনার অ্যারেতে যদি পুনরাবৃত্তি মান থাকে তবে সেটটিতে রূপান্তর করবেন না।

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