সচলভাবে জাভাস্ক্রিপ্ট সহযোগী অ্যারেতে কীগুলি তৈরি করা হচ্ছে


199

আমি কীভাবে জাভাস্ক্রিপ্ট এসোসিয়েটিভ অ্যারেগুলিতে গতিশীলভাবে কীগুলি তৈরি করতে পারি?

আমি এখন পর্যন্ত যে সমস্ত ডকুমেন্টেশন পেয়েছি তা হ'ল ইতিমধ্যে তৈরি করা কীগুলি আপডেট করা:

 arr['key'] = val;

আমার এই মত একটি স্ট্রিং আছে " name = oscar "

এবং আমি এই জাতীয় কিছু দিয়ে শেষ করতে চাই:

{ name: 'whatever' }

এটিই আমি স্ট্রিংটি বিভক্ত করে প্রথম উপাদানটি পেয়েছি এবং এটি একটি অভিধানে রাখতে চাই।

কোড

var text = ' name = oscar '
var dict = new Array();
var keyValuePair = text.split(' = ');
dict[ keyValuePair[0] ] = 'whatever';
alert( dict ); // prints nothing.

24
সুবিধার্থে ইউজিনের উত্তরের লিঙ্কটি জাম্প করুন
user56reinstatemonica8

উত্তর:


142

প্রথম উদাহরণ ব্যবহার করুন। কীটি উপস্থিত না থাকলে এটি যুক্ত করা হবে।

var a = new Array();
a['name'] = 'oscar';
alert(a['name']);

'অস্কার' সমন্বিত একটি বার্তা বাক্স পপআপ করবে।

চেষ্টা করুন:

var text = 'name = oscar'
var dict = new Array()
var keyValuePair = text.replace(/ /g,'').split('=');
dict[ keyValuePair[0] ] = keyValuePair[1];
alert( dict[keyValuePair[0]] );

আমি নিশ্চিত যে এটি ফায়ারফক্সের নমুনা হিসাবে দৌড়েছি। আপনি উদ্ধৃতিতে 'নাম' রাখার বিষয়টি নিশ্চিত করেছেন?
tvanfosson

1
উহমম না, কারণ, আমি স্থিতিশীলভাবে নয় "গতিশীল" কী তৈরি করছি। যাইহোক আমাকে
ডাবল চেক করুন

2
ড্যানির আরও সম্পূর্ণ ব্যাখ্যা দেখুন। আপনি কোনও সূচক (যেমন মায়ার্য [i]) সহ লুপের জন্য অ্যারের মানগুলি উল্লেখ করতে সক্ষম হবেন না। আশা করি এটি খুব বিভ্রান্তিকর নয়।
এমকে_দেব

4
আরও ভাল হ'ল। দৈর্ঘ্য, .স্লাইস () ইত্যাদি থাকার ওভারহেড এড়াতে কোনও অবজেক্ট (ব্র্যাকেট} ation স্বরলিপি) ব্যবহার করা ভাল যা অ্যারে প্রোটোটাইপের অন্তর্ভুক্ত
bjornl

488

সমস্তরকম উদাহরণ যেমন ভালভাবে কাজ করা হয় তখন অতি জটিল হয়ে থাকে:

  • তারা ব্যবহার করে new Array(), যা একটি সাধারণ এসোসিয়েটিভ অ্যারে (একেএ অভিধান) এর জন্য ওভারকিল (এবং একটি ওভারহেড)।
  • আরও ভাল ব্যবহার করুন new Object()। ভাল কাজ করে, তবে এই সমস্ত অতিরিক্ত টাইপিং কেন?

এই প্রশ্নটিকে "শিক্ষানবিশ" ট্যাগ করা হয়েছে, তাই এটি সহজ করা যাক।

জাভাস্ক্রিপ্টে একটি অভিধান ব্যবহার করার উবার-সহজ উপায় বা "কেন জাভাস্ক্রিপ্টের কোনও বিশেষ অভিধানের অবজেক্ট নেই?":

// create an empty associative array (in JavaScript it is called ... Object)
var dict = {};   // huh? {} is a shortcut for "new Object()"

// add a key named fred with value 42
dict.fred = 42;  // we can do that because "fred" is a constant
                 // and conforms to id rules

// add a key named 2bob2 with value "twins!"
dict["2bob2"] = "twins!";  // we use the subscript notation because
                           // the key is arbitrary (not id)

// add an arbitrary dynamic key with a dynamic value
var key = ..., // insanely complex calculations for the key
    val = ...; // insanely complex calculations for the value
dict[key] = val;

// read value of "fred"
val = dict.fred;

// read value of 2bob2
val = dict["2bob2"];

// read value of our cool secret key
val = dict[key];

এখন মানগুলি পরিবর্তন করা যাক:

// change the value of fred
dict.fred = "astra";
// the assignment creates and/or replaces key-value pairs

// change value of 2bob2
dict["2bob2"] = [1, 2, 3];  // any legal value can be used

// change value of our secret key
dict[key] = undefined;
// contrary to popular beliefs assigning "undefined" does not remove the key

// go over all keys and values in our dictionary
for (key in dict) {
  // for-in loop goes over all properties including inherited properties
  // let's use only our own properties
  if (dict.hasOwnProperty(key)) {
    console.log("key = " + key + ", value = " + dict[key]);
  }
}

মানগুলি মুছে ফেলাও সহজ:

// let's delete fred
delete dict.fred;
// fred is removed, the rest is still intact

// let's delete 2bob2
delete dict["2bob2"];

// let's delete our secret key
delete dict[key];

// now dict is empty

// let's replace it, recreating all original data
dict = {
  fred:    42,
  "2bob2": "twins!"
  // we can't add the original secret key because it was dynamic,
  // we can only add static keys
  // ...
  // oh well
  temp1:   val
};
// let's rename temp1 into our secret key:
if (key != "temp1") {
  dict[key] = dict.temp1; // copy the value
  delete dict.temp1;      // kill the old key
} else {
  // do nothing, we are good ;-)
}

2
হ্যালো, আমি জানি আমি পুরানো উত্তরটির জবাব দিচ্ছি, তবে এটি গুগলে উচ্চতর, তাই আমি যাইহোক জিজ্ঞাসা করব। "আমরা মূল গোপন কীটি যুক্ত করতে পারি না কারণ এটি গতিশীল ছিল, আমরা আপনার উদাহরণের মধ্যে কেবল স্ট্যাটিক কী যুক্ত করতে পারি" এর কী সম্পর্কে আমি বিভ্রান্ত হয়ে পড়েছি।
কারেল বালেক

1
এর অর্থ হ'ল এটি যা বোঝায়: আমরা এর মানটি জানি না, তাই আমরা এটিকে ধ্রুবক হিসাবে উপস্থাপন করতে পারি না, যা কোনও বস্তুর আক্ষরিক কোনও কী নির্দিষ্ট করার সময় প্রয়োজন হয় is
ইউজিন লাজুতিন

3
তবে, "আমরা মূল গোপন কীটি যুক্ত করতে পারি না কারণ এটি গতিশীল ছিল" নিজেই সঠিক নয়, যদিও আপনি সরাসরি {} তে কী হিসাবে ভেরিয়েবলটি ব্যবহার করতে পারবেন না, বা ডট-নোটেশন সহ কী হিসাবে ব্যবহার করতে পারবেন না। আপনি উদাহরণস্বরূপ দেখানোর পরে আমরা "ডিক্ট [কী] = ভাল" এর মাধ্যমে একটি গতিশীল কী যুক্ত করতে পারি। সীমাবদ্ধতাটি কীটির পরিবর্তে not not-নোটেশন ব্যবহারের সাথে রয়েছে।
Zut

8
এটি শেল্ডন কুপারের জবাব দেখে মনে হচ্ছে :)
jpatiaga

4
নিখুঁত সম্পূর্ণ উত্তর, ডিফল্ট হওয়া উচিত
ডেনিস গোলোমাজভ

29

জাভাস্ক্রিপ্টে সাহসী অ্যারে নেই , এতে অবজেক্ট রয়েছে

নিম্নলিখিত কোডের লাইনগুলি একই জিনিসটি করে - কোনও বস্তুর 'নাম' ক্ষেত্রটি 'orion' এ সেট করে।

var f = new Object(); f.name = 'orion';
var f = new Object(); f['name'] = 'orion';
var f = new Array(); f.name = 'orion';
var f = new Array(); f['name'] = 'orion';
var f = new XMLHttpRequest(); f['name'] = 'orion';

দেখে মনে হচ্ছে আপনার কাছে অ্যা্যাসোসিয়েটিভ অ্যারে রয়েছে কারণ Arrayএটিও একটি Object- তবে আপনি আসলে অ্যারেগুলিতে কিছু যুক্ত করছেন না, আপনি বস্তুতে ক্ষেত্রগুলি সেট করছেন।

এখন এটি পরিষ্কার হয়ে গেছে, এখানে আপনার উদাহরণের কার্যকারী সমাধান রয়েছে is

var text = '{ name = oscar }'
var dict = new Object();

// Remove {} and spaces
var cleaned = text.replace(/[{} ]/g, '');

// split into key and value
var kvp = cleaned.split('=');

// put in the object
dict[ kvp[0] ] = kvp[1];
alert( dict.name ); // prints oscar.

পাঠ্য স্ট্রিংটি আসলে কোঁকড়ানো ধনুর্বন্ধনী রয়েছে বলে ধরে নিলে আপনি কম-বেশি এটিকে JSON হিসাবে বিবেচনা করতে পারবেন .. এর সাথে = চিহ্নটি প্রতিস্থাপন করুন: এবং আপনার
অবসানের

1
ওফস, স্ট্রিংটি সঠিকভাবে সীমাবদ্ধ নয়। কিছুই রিজেক্স ঠিক করতে পারে না।
নিয়নস্কি

9

এমকে_দেবের প্রতিক্রিয়া হিসাবে, একজন পুনরাবৃত্তি করতে সক্ষম, তবে একটানা নয় (এর জন্য অবশ্যই একটি অ্যারের প্রয়োজন)

দ্রুত গুগল অনুসন্ধান জাভাস্ক্রিপ্টে হ্যাশ টেবিলগুলি নিয়ে আসে

একটি হ্যাশগুলিতে মানগুলি লুপিংয়ের উদাহরণ কোড (পূর্বোক্ত লিঙ্ক থেকে):

var myArray = new Array();
myArray['one'] = 1;
myArray['two'] = 2;
myArray['three'] = 3;

// show the values stored
for (var i in myArray) {
    alert('key is: ' + i + ', value is: ' + myArray[i]);
}

5

আসল কোড (আমি লাইন নম্বরগুলি যুক্ত করেছি যাতে সেগুলি উল্লেখ করতে পারে):

1  var text = ' name = oscar '
2  var dict = new Array();
3  var keyValuePair = text.split(' = ');
4  dict[ keyValuePair[0] ] = 'whatever';
5  alert( dict ); // prints nothing.

প্রায় সেখানে...

  • লাইন 1: আপনি trimযেমন পাঠ্য তে এটি করা উচিত name = oscar
  • লাইন 3: ঠিক আছে যতক্ষণ না আপনি সবসময় আপনার সমান চারপাশে ফাঁকা জায়গা রাখেন। trimলাইন 1 এ না থাকাই ভাল , =প্রতিটি কীভ্যালিউপায়ার ব্যবহার এবং ছাঁটাই
  • 3 এর পরে এবং 4 এর আগে একটি লাইন যুক্ত করুন:

    key = keyValuePair[0];`
  • লাইন 4: এখন হয়ে যায়:

    dict[key] = keyValuePair[1];
  • লাইন 5: এতে পরিবর্তন করুন:

    alert( dict['name'] );  // it will print out 'oscar'

আমি যা বলতে চাইছি তা হ'ল এটি dict[keyValuePair[0]]কাজ করে না, আপনাকে একটি স্ট্রিং সেট করতে হবে keyValuePair[0]এবং এটিকে সহযোগী কী হিসাবে ব্যবহার করতে হবে। আমার কাজ করার জন্য এটিই একমাত্র উপায়। আপনি এটি সেট আপ করার পরে আপনি এটির সাথে সংখ্যাসূচক সূচক বা উদ্ধৃতিতে কী ব্যবহার করতে পারেন।

আশা করি এইটি কাজ করবে.


4

সমস্ত আধুনিক ব্রাউজার একটি মানচিত্রকে সমর্থন করে যা একটি কী / মান ডেটা স্ট্রিউচার। কয়েকটি কারণ রয়েছে যা মানচিত্রকে অবজেক্টের চেয়ে আরও ভাল করে তোলে:

  • একটি অবজেক্টের একটি প্রোটোটাইপ রয়েছে, তাই মানচিত্রে ডিফল্ট কী রয়েছে।
  • কোনও অবজেক্টের কীগুলি স্ট্রিংস, যেখানে সেগুলি মানচিত্রের যে কোনও মান হতে পারে।
  • আপনাকে কোনও অবজেক্টের জন্য আকারের ট্র্যাক রাখতে হবে এমন সময় আপনি সহজেই মানচিত্রের আকার পেতে পারেন।

উদাহরণ:

var myMap = new Map();

var keyObj = {},
    keyFunc = function () {},
    keyString = "a string";

myMap.set(keyString, "value associated with 'a string'");
myMap.set(keyObj, "value associated with keyObj");
myMap.set(keyFunc, "value associated with keyFunc");

myMap.size; // 3

myMap.get(keyString);    // "value associated with 'a string'"
myMap.get(keyObj);       // "value associated with keyObj"
myMap.get(keyFunc);      // "value associated with keyFunc"

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



1
var myArray = new Array();
myArray['one'] = 1;
myArray['two'] = 2;
myArray['three'] = 3;
// show the values stored
for (var i in myArray) {
    alert('key is: ' + i + ', value is: ' + myArray[i]);
}

এটি ঠিক আছে তবে অ্যারে অবজেক্টের প্রতিটি সম্পত্তি দিয়ে পুনরাবৃত্তি হয়। আপনি যদি শুধুমাত্র myArray.one, myArray.two বৈশিষ্ট্যগুলির মাধ্যমে পুনরাবৃত্তি করতে চান তবে আপনি এটির মতো চেষ্টা করুন

myArray['one'] = 1;
myArray['two'] = 2;
myArray['three'] = 3;
myArray.push("one");
myArray.push("two");
myArray.push("three");
for(i=0;i<maArray.length;i++{
    console.log(myArray[myArray[i]])
}

এখন আপনি মাইআরাই ["একটি"] উভয়ই অ্যাক্সেস করতে পারবেন এবং কেবল এই বৈশিষ্ট্যগুলির মাধ্যমে পুনরাবৃত্তি করতে পারেন।


আপনি কি উদাহরণ হিসাবে ভুল টাইপ গণনা আছে? :-) ম্যারে, ভুলে যাওয়া বন্ধ ')' ​​... ...
ব্রায়ান হক

উদাহরণের জন্য ধন্যবাদ। আমরা ঐক্যবদ্ধ হতে পারে Arrayএবং Objectএবং একমাত্র কাজ Objectগাছ! অপূর্ব অন্তর্দৃষ্টি! এটি তৈরি করতে খুব দরকারী Object.getOwnPropertyNames(obj/array)!
ব্রায়ান হক 12'14

1
var obj = {};

                for (i = 0; i < data.length; i++) {
                    if(i%2==0) {
                        var left = data[i].substring(data[i].indexOf('.') + 1);
                        var right = data[i + 1].substring(data[i + 1].indexOf('.') + 1);

                        obj[left] = right;
                        count++;
                    }
                }
                console.log("obj");
                console.log(obj);
                // show the values stored
                for (var i in obj) {
                    console.log('key is: ' + i + ', value is: ' + obj[i]);
                }

            }
        };

}

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