একটি জাভাস্ক্রিপ্ট হ্যাশ মানচিত্র কীভাবে প্রয়োগ করা হয়?


89

আমি বর্তমানে ওপেনলায়ার্সের সাথে কাজ করছি এবং একটি ভেক্টর স্তর (100000 এর বেশি ভেক্টরের চেয়ে বেশি) আঁকতে প্রচুর ডেটা রয়েছে।

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


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

4
ES6 এর খাঁটি মানচিত্র রয়েছে। লিঙ্কটি প্লেইন অবজেক্ট এবং মানচিত্রের মূল পার্থক্য ইত্যাদির বর্ণনা দেয়: এমডিএন জাভাস্ক্রিপ্ট ম্যাপ
ডেন রোমান

উত্তর:


196

প্রত্যেক জাভাস্ক্রিপ্ট বস্তুর একটি সহজ hashmap যা একটি স্ট্রিং বা কবুল করেন সাংকেতিক তার কী-এর মত তাই আপনি যেমন আপনার কোড লিখতে পেরেছিলেন:

var map = {};
// add a item
map[key1] = value1;
// or remove it
delete map[key1];
// or determine whether a key exists
key1 in map;

জাভাস্ক্রিপ্ট অবজেক্টটি এর বাস্তবায়নের জন্য একটি বাস্তব হ্যাশম্যাপ, সুতরাং অনুসন্ধানে জটিলতা হ'ল (1), তবে hashcode()জাভাস্ক্রিপ্ট স্ট্রিংগুলির জন্য কোনও উত্সর্গীকৃত কার্য নেই , এটি জাভাস্ক্রিপ্ট ইঞ্জিন (ভি 8, স্পাইডারমোনকি, জেএসক্রিপ্ট.ডিল ইত্যাদি) দ্বারা অভ্যন্তরীণভাবে প্রয়োগ করা হয় .. ।)

2020 আপডেট:

জাভাস্ক্রিপ্ট আজ অন্যান্য ডেটাটাইপগুলি সমর্থন করে: Mapএবং WeakMap। তারা হ্যাশ মানচিত্র হিসাবে traditionalতিহ্যগত জিনিসগুলির চেয়ে আরও ঘনিষ্ঠভাবে আচরণ করে।


পারফেক্ট আমি আগে $ ('ডিভ # কিছুডিভ') ব্যবহার করছিলাম data ধন্যবাদ
স্বরূপ

মানচিত্রটির দৈর্ঘ্য সন্ধান করার কোনও উপায় আছে?
রোলিং পাথর

4
@ শ্রীধর অবজেক্ট.কিজ (মানচিত্র) ব্যবহার করুন। দৈর্ঘ্য
ওটাকুস্টে

4
দ্রষ্টব্য আপনি একটি সংখ্যাটি কী হিসাবে ব্যবহার করতে পারেন map[2] = 'foo'তবে এটি অভ্যন্তরীণভাবে একটি স্ট্রিংয়ে কাস্ট হয়ে যায়> map = { '2': 'foo' }
হ্যারি মোরেনো

@ টাকুস্টে এটি দুর্দান্ত শীতল বৈশিষ্ট্য যা আমি আজ জানতে পেরেছিলাম :) সত্যিই আমাকে জাভাস্ক্রিপ্টটি খুব কাছ থেকে শিখতে হবে।
পঙ্কজ প্রকাশ

31

জাভাস্ক্রিপ্ট অবজেক্টগুলি সম্পূর্ণরূপে হ্যাশ মানচিত্রের উপরে প্রয়োগ করা যায় না।

আপনার ব্রাউজার কনসোলে এটি ব্যবহার করে দেখুন:

var foo = {
    a: true,
    b: true,
    z: true,
    c: true
}

for (var i in foo) {
    console.log(i);
}

... এবং আপনি এগুলি সন্নিবেশ ক্রমে ফিরিয়ে আনবেন, এটি হ'ল মানিক আচরণ।

হ্যাশ মানচিত্র অন্তর্নিহিতভাবে অর্ডার বজায় রাখে না, তাই জাভাস্ক্রিপ্ট বাস্তবায়নগুলি হ্যাশ মানচিত্রগুলি কোনওভাবে ব্যবহার করতে পারে , তবে যদি তা করে তবে এটি অন্তত একটি পৃথক সূচি এবং সন্নিবেশের জন্য কিছু অতিরিক্ত বুক-কিপিংয়ের প্রয়োজন হবে।

লার্স বাকের একটি ভিডিও এখানে ব্যাখ্যা করছে যে ভি 8 কেন বস্তুগুলি প্রয়োগ করতে হ্যাশ মানচিত্র ব্যবহার করে না


4
"ওটাকুস্টে প্রযুক্তিগতভাবে ভুল, সবচেয়ে খারাপ ধরনের" " এটা কিছুটা কঠোর। এটি 1: 1 নাও হতে পারে তবে অভিধানের মতো হ্যাশ ব্যবহারের উদ্দেশ্য এবং উদ্দেশ্যগুলির জন্য এটি একই ফ্যাশনে কাজ করে।
সম্ভবত

4
কেবল স্পষ্ট করে বলতে চাই যে এটি জাভাস্ক্রিপ্টের কিছু বাস্তবায়নের ক্ষেত্রে সত্য হতে পারে (যেমন বেশিরভাগ ব্রাউজারগুলি) তবে অগত্যা সত্য নয়। কীগুলির মাধ্যমে পুনরাবৃত্তির ক্রমটি ECMAScript মান দ্বারা সংজ্ঞায়িত করা হয়নি এবং কোনও আদেশ হতে পারে এবং এখনও একটি বৈধ জেএস বাস্তবায়ন হতে পারে।
TheZ

19

জাভা মানচিত্রের অনুরূপ কিছু ব্যবহার করার এখানে একটি সহজ এবং সুবিধাজনক উপায় :

var map= {
    'map_name_1': map_value_1,
    'map_name_2': map_value_2,
    'map_name_3': map_value_3,
    'map_name_4': map_value_4
    }

এবং মান পেতে:

alert( map['map_name_1'] );    // fives the value of map_value_1

......  etc  .....

13

আপনি এই ক্লাস চেষ্টা করা উচিত Map:

var myMap = new Map();

// setting the values
myMap.set("1", 'value1');
myMap.set("2", 'value2');
myMap.set("3", 'value3');

myMap.size; // 3

// getting the values
myMap.get("1");    // "value associated with "value1"
myMap.get("2");       // "value associated with "value1"
myMap.get("3");      // "value associated with "value3"

বিজ্ঞপ্তি: কী এবং মান যে কোনও প্রকারের হতে পারে।

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


4

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

ES6 যথাযথ মানচিত্র ( MDN জাভাস্ক্রিপ্ট মানচিত্র দেখুন ) প্রবর্তন করে যার মধ্যে স্ট্যান্ডার্ডটি বলে :

ম্যাপ অবজেক্টটি হ্যাশ টেবিল বা অন্যান্য প্রক্রিয়াগুলি প্রয়োগ করে অবশ্যই প্রয়োগ করা উচিত যা সংগ্রহের উপাদানগুলির সংখ্যার উপর ভিত্তি করে অ্যাক্সেসের সময়গুলি অন্তর্ভুক্ত থাকে sub



0

আমি সেই সমস্যাটিতে দৌড়াচ্ছিলাম যেখানে আমার কাছে কয়েকটি সাধারণ কী সহ জসন ছিল। আমি একই মানযুক্ত সমস্ত মানকে গ্রুপ করতে চেয়েছিলাম। কিছু সার্ফিংয়ের পরে আমি হ্যাশম্যাপ প্যাকেজ পেয়েছি । যা সত্যই সহায়ক।

গ্রুপে একই কী দিয়ে উপাদান, আমি ব্যবহার multi(key:*, value:*, key2:*, value2:*, ...)

এই প্যাকেজটি জাভা হাশম্যাপ সংগ্রহের সাথে কিছুটা মিল, তবে জাভা হাশম্যাপের মতো শক্তিশালী নয়।

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