জাভাস্ক্রিপ্টে সাহসী অ্যারেতে কী হিসাবে কোনও পূর্ণসংখ্যা ব্যবহার করা


106

যখন আমি একটি নতুন জাভাস্ক্রিপ্ট অ্যারে তৈরি করি এবং কী হিসাবে একটি পূর্ণসংখ্যা ব্যবহার করি, তখন পূর্ণসংখ্যা পর্যন্ত সেই অ্যারের প্রতিটি উপাদান অপরিজ্ঞাত হিসাবে তৈরি হয়।

উদাহরণ স্বরূপ:

var test = new Array();
test[2300] = 'Some string';
console.log(test);

2298 অপরিশোধিত এবং একটি 'কিছু স্ট্রিং' আউটপুট আসবে।

পূর্ণসংখ্যার পরিবর্তে 2300 স্ট্রিং হিসাবে ব্যবহার করার জন্য কীভাবে আমার জাভাস্ক্রিপ্ট পাওয়া উচিত, বা 2299 খালি সূচকগুলি ইনস্ট্যান্ট করা থেকে আমার কীভাবে তা রাখা উচিত?

উত্তর:


132

লোকেরা যেমন বলছে তেমন কোনও বস্তু ব্যবহার করুন। তবে নোট করুন যে আপনার কাছে পূর্ণসংখ্যা কী থাকতে পারে না । জাভাস্ক্রিপ্ট পূর্ণসংখ্যাকে একটি স্ট্রিতে রূপান্তর করবে । নিম্নলিখিত ফলাফলগুলি 20, অপরিবর্তিত নয়:

var test = {}
test[2300] = 20;
console.log(test["2300"]);

12
+1 নোট করুন এটি অ্যারেগুলির ক্ষেত্রেও সত্য! দেখতে stackoverflow.com/questions/1450957/...
bobince

4
@ ববিন্স: অভ্যন্তরীণভাবে, নিশ্চিত যাইহোক, যৌক্তিকভাবে , অ্যারেগুলিতে পূর্ণসংখ্যার "কী" রয়েছে।
অরবিট

4
দয়া করে মনে রাখবেন, কী হিসাবে পূর্ণসংখ্যা ব্যবহার করা আপনার অ্যারের দৈর্ঘ্য পরিবর্তন করবে। পরিবর্তে আপনার অবশ্যই অবজেক্টটি ব্যবহার করা উচিত। আমি কেবল ফেসবুক আইডিটিকে কী হিসাবে ব্যবহার করতে চেয়েছিলাম, এবং JSON.stringify আমার মেশিনটি ক্র্যাশ করবে;)
ক্রিশ্চিয়ান

4
উত্তর আমি আজ যা ছড়িয়েছি তার সরল সংস্করণটি দেখুন: jsfiddle.net/cincodenada/pseujLex/2 হ্রাস পেলে এটি সংশ্লেষিত মনে হতে পারে, তবে এটি একটি বৃহত্তর স্ক্রিপ্টের সংবেদনশীল অংশ ছিল (এবং কফিস্ক্রিপ্টে কিছুটা কম রচিত : jsfiddle.net/ সিনকোডেনডা / oojr7Ltn / 2 )। এই আপাতদৃষ্টিতে বাস্তবায়ন বিশদটি আমাকে আজ বাগ-শিকারের জন্য বেশ ভাল ব্যয় করেছে।
সিনকোডেনদা

4
অ-পুরো সংখ্যাগুলির জন্য একটি ছোট নোট: 0.25এবং .25একই স্ট্রিংটিতে সমাধান করুন "0.25"। তাই আপনি যদি ভগ্ন কী ব্যবহার করছেন, তাহলে আপনি একটি সংখ্যাসূচকভাবে সেট কী সম্পত্তি উদ্ধার করতে পারেন 0.25ব্যবহার 0.25, .25, "0.25"কিন্তু না ".25"
স্যান্ডি গিফোর্ড

35

আপনি কেবল একটি অবজেক্ট ব্যবহার করতে পারেন:

var test = {}
test[2300] = 'Some string';

17
তবুও স্ট্রিংয়ের জন্য কাস্ট হয়ে যায়।
drew010

4
@ drew010 হ্যাঁ, জাভাস্ক্রিপ্টের অবজেক্টগুলি কেবল স্ট্রিং দিয়ে সূচকে অনুমতি দেয়।
পিথিকোস

22

লোকেরা যেমন বলে, জাভাস্ক্রিপ্ট সংখ্যার একটি স্ট্রিংকে পূর্ণসংখ্যায় রূপান্তর করবে, সুতরাং সরাসরি কোনও এসোসিয়েটিভ অ্যারেতে ব্যবহার করা সম্ভব নয়, তবে বস্তুগুলি আপনার জন্য একইভাবে কাজ করবে বলে আমি মনে করি।

আপনি আপনার বস্তু তৈরি করতে পারেন:

var object = {};

আর অ্যারে হিসাবে কাজ করে মানগুলি যুক্ত করুন:

object[1] = value;
object[2] = value;

এটি আপনাকে দেবে:

{
  '1': value,
  '2': value
}

এর পরে আপনি কীটি পেয়ে অন্য ভাষায় অ্যারের মতো এটিকে অ্যাক্সেস করতে পারবেন:

for(key in object)
{
   value = object[key] ;
}

আমি পরীক্ষা এবং কাজ করেছি।


19

যদি ব্যবহারের ক্ষেত্রে কোনও সংগ্রহে ডেটা সংরক্ষণ করা হয় তবে ECMAScript 6Map প্রকারটি সরবরাহ করে ।

এটি আরম্ভ করা কেবল ভারী।

এখানে একটি উদাহরণ:

const map = new Map();
map.set(1, "One");
map.set(2, "Two");
map.set(3, "Three");

console.log("=== With Map ===");

for (const [key, value] of map) {
    console.log(`${key}: ${value} (${typeof(key)})`);
}

console.log("=== With Object ===");

const fakeMap = {
    1: "One",
    2: "Two",
    3: "Three"
};

for (const key in fakeMap) {
    console.log(`${key}: ${fakeMap[key]} (${typeof(key)})`);
}

ফলাফল:

=== With Map ===
1: One (number)
2: Two (number)
3: Three (number)
=== With Object ===
1: One (string)
2: Two (string)
3: Three (string)

11

অন্যান্য উত্তর সংকলন:

অবজেক্ট

var test = {};

একটি নতুন সংখ্যার কী হিসাবে কোনও সংখ্যা ব্যবহার করার সময়, সংখ্যাটি একটি স্ট্রিংয়ে পরিণত হয়:

test[2300] = 'Some string';
console.log(test['2300']);
// Output: 'Some string'

একই নম্বর ব্যবহার করে সম্পত্তিটির মান অ্যাক্সেস করার সময়, নম্বরটি আবার স্ট্রিংয়ে পরিণত হয়:

console.log(test[2300]);
// Output: 'Some string'

বস্তু থেকে কীগুলি প্রাপ্ত করার সময়, যদিও তারা সংখ্যায় ফিরে যাবে না:

for (var key in test) {
    console.log(typeof key);
}
// Output: 'string'

মানচিত্র

ECMAScript 6 মানচিত্র অবজেক্ট ( ডকুমেন্টেশন , অবজেক্টের সাথে তুলনা ) ব্যবহারের অনুমতি দেয় । যদি আপনার কোডটি স্থানীয়ভাবে ব্যাখ্যা করা হয় বা ECMAScript 6 সামঞ্জস্যতা টেবিলটি আপনার উদ্দেশ্যে যথেষ্ট সবুজ দেখায়, একটি মানচিত্র ব্যবহার করে বিবেচনা করুন:

var test = new Map();
test.set(2300, 'Some string');
console.log(test.get(2300));
// Output: 'Some string'

আরও ভাল এবং আরও খারাপের জন্য কোনও ধরণের রূপান্তর হয় না:

console.log(test.get('2300'));
// Output: undefined
test.set('2300', 'Very different string');
console.log(test.get(2300));
// Output: 'Some string'

4

অ্যারের পরিবর্তে একটি অবজেক্ট ব্যবহার করুন। জাভাস্ক্রিপ্টে অ্যারেগুলি সম্মিলিত অ্যারে নয়। এগুলি হ'ল যাদুযুক্ত যেকোন বৈশিষ্ট্যের সাথে যুক্ত যার নামগুলি পূর্ণসংখ্যার মতো লাগে। আপনি যদি themতিহ্যবাহী অ্যারে-জাতীয় কাঠামো হিসাবে এগুলি ব্যবহার না করেন তবে সেই যাদুটি আপনি চান তা নয়।

var test = {};
test[2300] = 'some string';
console.log(test);

4
তারা করতে পারেন মিশুক অ্যারে হতে, কিন্তু শুধুমাত্র কারণ তারা বস্তু সেট বৈশিষ্ট্য পূর্ব-পুরুষদের রেখেছ করতে পারে আছে। তবে এটি কেবল হাস্যকর বিষয়গুলিকে বিভ্রান্ত করে তোলে এবং তাই হ্যাঁ, অবজেক্ট ব্যবহার করা আরও ভাল।
গ্রাজা

অ্যারে কখনই সাহসী গ্রাজা হতে পারে না। যদি আপনি একটি অ্যারেতে কীগুলি ব্যবহার করার চেষ্টা করেন এবং তারপরে পুনরাবৃত্তি করেন তবে আপনি খেয়াল করবেন যে আপনি সমস্ত ডিফল্ট পদ্ধতি এবং অ্যারের বৈশিষ্ট্যগুলিও পুনরুক্ত করছেন -> খুব পছন্দসই নয়।
সুইজেক টেলার

@ সুইজেক - ঠিক কেন আমি "হাস্যকরভাবে বিভ্রান্তিকর" বলেছি। আপনি সহযোগী অ্যারে হিসাবে একটি অ্যারে ব্যবহার করতে পারেন - এটি নাম / মান জোড়া হিসাবে, তবে আপনি এগুলি পুনরাবৃত্তি করতে চান না! (আমি কেবল কোনও প্রযুক্তিগত
দিকটি

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

3

কোনও বস্তু ব্যবহারের চেষ্টা করুন, অ্যারে নয়:

var test = new Object(); test[2300] = 'Some string';

4
এই হ 'ল যেতে হয়. একটি স্ট্রিং সংরক্ষণ করার জন্য আপনি 2300 এন্ট্রি দীর্ঘ অ্যারে তৈরি করবেন না।
ক্রিস্টিয়ান

4
@ ক্রিশ্চিয়ান জেএস অ্যারেগুলি নকল অ্যারে। রান করুন var a = []; a[Math.pow(2, 30)] = 'hello';এবং আপনি ব্রাউজার / মেমোরির ব্যবহার কোনও গিগাবাইটের মাধ্যমে দেখতে পাচ্ছেন না তবে আপনি দেখতে পাবেন a.length1073741824 V তারা যথেষ্ট পরিমাণে বিরল।
অ্যান্ডি

2

যখন সম্পত্তির নাম পূর্ণসংখ্যা হয় তখন একটি সহযোগী অ্যারে বৈশিষ্ট্যের জন্য মানটি পান:

সংখ্যাসূচক অ্যারে দিয়ে শুরু করা যেখানে সম্পত্তির নামগুলি পূর্ণসংখ্যা হয়:

var categories = [
    {"1": "Category 1"},
    {"2": "Category 2"},
    {"3": "Category 3"},
    {"4": "Category 4"}
];

অ্যারে আইটেম পুশ করুন:

categories.push({"2300": "Category 2300"});
categories.push({"2301": "Category 2301"});

অ্যারের মাধ্যমে লুপ করুন এবং সম্পত্তি মান সহ কিছু করুন।

for (var i = 0; i < categories.length; i++) {
    for (var categoryid in categories[i]) {
        var category = categories[i][categoryid];
        // Log progress to the console
        console.log(categoryid + ": " + category);
        //  ... do something
    }
}

কনসোল আউটপুট এর মতো দেখতে হবে:

1: Category 1
2: Category 2
3: Category 3
4: Category 4
2300: Category 2300
2301: Category 2301

যেমন আপনি দেখতে পাচ্ছেন, আপনি সমিতির অ্যারে সীমাবদ্ধতাটি পেতে পারেন এবং একটি সম্পত্তির নাম পূর্ণসংখ্যা হতে পারেন।

দ্রষ্টব্য: আমার উদাহরণের সহযোগী অ্যারে হ'ল JSON বিষয়বস্তু যদি আপনি কোনও অভিধান <স্ট্রিং, স্ট্রিং> [] অবজেক্টকে ক্রমিক করে তোলেন।


0

কী হিসাবে পূর্ণসংখ্যা সহ - একটি অ্যারের পরিবর্তে কোনও বস্তু ব্যবহার করুন।


0

কখনও কখনও আমি আমার কীগুলির জন্য একটি উপসর্গ ব্যবহার করি। উদাহরণ স্বরূপ:

var pre = 'foo',
    key = pre + 1234

obj = {};

obj[key] = val;

এখন তাদের অ্যাক্সেস করতে আপনার কোনও সমস্যা নেই।

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