কীভাবে ডিকশনারি তৈরি করবেন এবং কী dyn মান জোড়া যুক্ত করবেন?


323

পোস্ট থেকে:

অভিধান <স্ট্রিং, স্ট্রিং> হিসাবে প্রাপ্ত হওয়ার জন্য একটি জেএসওএন অ্যারে প্রেরণ

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

কেউ কীভাবে কীভাবে সেই অবজেক্টটি তৈরি করতে এবং গতিশীলভাবে কী মান জোড় যুক্ত করতে জানেন?

আমি চেষ্টা করেছিলাম:

var vars = [{key:"key", value:"value"}];
vars[0].key = "newkey";
vars[0].value = "newvalue";

কিন্তু এটি কাজ করে না।


2
এটি দুর্দান্ত কাজ করে। console.log (Vars); আমাকে দেখান [অবজেক্ট কী: "নিউকি" মান: "নিউভ্যালু" প্রোটো : অবজেক্ট]
অ্যালেক্স প্লিয়াতউ

এটি একটি তালিকা নয়, অভিধান নয়: \ আমি মনে করি যে ডেটাগুলি "জোড়া" এর তালিকার মতো আরও ভালভাবে উপস্থাপিত হয়েছে list = [["key1","value1"],["key2","value2"]]। অন্য কয়েকটি ভাষার একটি "জুড়ি" বা "টিপল" প্রকার রয়েছে। tldr আসল ডিক যোগ করার জন্য:dict['key'] = "value"
জর্ডান স্টুয়ার্ট

উত্তর:


551
var dict = []; // create an empty array

dict.push({
    key:   "keyName",
    value: "the value"
});
// repeat this last part as needed to add more key/value pairs

মূলত, আপনি 2 টি বৈশিষ্ট্য (ডাকা keyএবং value) সহ একটি বস্তু আক্ষরিক তৈরি করছেন push()এবং অ্যারেতে এটি (ব্যবহার করে ) সন্নিবেশ করছেন ।


সম্পাদনা: সুতরাং প্রায় 5 বছর পরে, এই উত্তরটি নিম্নমানের হয়ে উঠছে কারণ এটি কোনও "জেনারেল" জেএস বস্তুটি আক্ষরিক (ওরফে মানচিত্র, ওরফে হ্যাশ, ওরফে অভিধান) তৈরি করছে না।
এটা তোলে হয় তবে কাঠামো তৈরি যে ওপি চাইলেন (এবং যা সঙ্গে লিঙ্ক করা অন্যান্য প্রশ্নে দেখানো হয়), যা বস্তুর লিটারেল একটি অ্যারের , প্রতিটি সঙ্গে keyএবং valueবৈশিষ্ট্য। কেন কাঠামোর প্রয়োজনীয়তা আমাকে জিজ্ঞাসা করবেন না, তবে এটিই যার জন্য জিজ্ঞাসা করা হয়েছিল।

তবে, তবে আপনি যদি সরল জেএস বস্তুতে যা চান - এবং কাঠামোটি ওপি চেয়েছিল না - টিসিএল এর উত্তর দেখুন , যদিও আপনার কাছে কেবল কার্যকর কী আছে যা জেএসের নামগুলি সহ সাধারণ কীগুলি রয়েছে though আপনি কেবল এটি করতে পারেন:

// object literal with properties
var dict = {
  key1: "value1",
  key2: "value2"
  // etc.
};

অথবা কোনও বস্তু তৈরির পরে বৈশিষ্ট্যগুলি নির্ধারণ করতে নিয়মিত ডট-নোটেশন ব্যবহার করুন:

// empty object literal with properties added afterward
var dict = {};
dict.key1 = "value1";
dict.key2 = "value2";
// etc.

আপনি কি বন্ধনী স্বরলিপি চান তাহলে আপনি কী যে মত তাদের মধ্যে স্পেস, বিশেষ অক্ষর, বা জিনিষ আছে পেয়েছেন। উদাহরণ:

var dict = {};

// this obviously won't work
dict.some invalid key (for multiple reasons) = "value1";

// but this will
dict["some invalid key (for multiple reasons)"] = "value1";

আপনার কীগুলি গতিশীল হলে আপনি বন্ধনী স্বরলিপিও চান:

dict[firstName + " " + lastName] = "some value";

নোট করুন যে কীগুলি (সম্পত্তির নাম) সর্বদা স্ট্রিং থাকে এবং নন-স্ট্রিং মানগুলি কী হিসাবে ব্যবহৃত হলে একটি স্ট্রিংয়ে জোর করা হয়। যেমন কোনও Dateবস্তু তার স্ট্রিং প্রতিনিধিত্বতে রূপান্তরিত হয়:

dict[new Date] = "today's value";

console.log(dict);
// => {
//      "Sat Nov 04 2016 16:15:31 GMT-0700 (PDT)": "today's value"
//    }

তবে নোট করুন যে এটি অগত্যা "কেবলমাত্র কাজ করে না", কারণ অনেকগুলি অবজেক্টের স্ট্রিং প্রতিনিধিত্ব থাকবে "[object Object]"যা কোনও অ-অনন্য কী ব্যবহার করে না। সুতরাং যেমন কিছু থেকে সাবধান থাকুন:

var objA = { a: 23 },
    objB = { b: 42 };

dict[objA] = "value for objA";
dict[objB] = "value for objB";

console.log(dict);
// => { "[object Object]": "value for objB" }

সত্ত্বেও objAএবং objBহচ্ছে সম্পূর্ণ ভিন্ন এবং অনন্য উপাদান, তারা উভয় একই মূল স্ট্রিং উপস্থাপনা আছে: "[object Object]"

এর Dateমতো আচরণ না করার কারণটি হ'ল Dateপ্রোটোটাইপের একটি কাস্টম toStringপদ্ধতি রয়েছে যা ডিফল্ট স্ট্রিং উপস্থাপনাকে ওভাররাইড করে। এবং আপনি একই করতে পারেন:

// a simple constructor with a toString prototypal method
function Foo() {
  this.myRandomNumber = Math.random() * 1000 | 0;
}

Foo.prototype.toString = function () {
  return "Foo instance #" + this.myRandomNumber;
};

dict[new Foo] = "some value";

console.log(dict);
// => {
//      "Foo instance #712": "some value"
//    }

(নোট করুন যেহেতু উপরেরগুলি এলোমেলো সংখ্যা ব্যবহার করে , নামের সংঘর্ষগুলি এখনও খুব সহজেই ঘটতে পারে It's এটি কেবলমাত্র একটি বাস্তবায়নের চিত্রিত করার জন্য toString))

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


2
যে সাহসী?
সিএসবা তোথ

1
@ সিএসবাটোথ নং, কোনও dictসহযোগী অভিধান নয়। এটি অবজেক্টগুলির একটি অ্যারে, যার প্রতিটি দুটি অভিধানের মতো কিছুটা: "কী" এবং "মান"।
রোমান স্টারকভ

1
আপনার যা আছে সেখানে একটি অ্যারে রয়েছে যা কেবলমাত্র 'ডিক' নামে পরিচিত।
জানু কিউ পেবলিক

2
আপডেটটির প্রশংসা করুন এবং অতিরিক্ত তথ্য অনুসরণ করুন।
জ্যাকব

410
var dict = {};

dict['key'] = "testing";

console.log(dict);

পাইথনের মতোই কাজ করে :)

কনসোল আউটপুট:

Object {key: "testing"} 

3
এটি অবশ্যই অভিধান তৈরির সর্বোত্তম পন্থা এবং সঠিক উত্তরটিই!
রোমান

3
বন্ধনী {}বদলে বন্ধনী দিয়ে আরম্ভ করার জন্য খুব গুরুত্বপূর্ণ
জায়েদার

আমি এর মতো অভিধান হিসাবেও মৌলিক অবজেক্টগুলিকে ব্যবহার করি। সঠিক উপায়টি দেখে আনন্দিত!
TKoL

5
জাভাস্ক্রিপ্টের 'বিউটি'! বস্তুটি সত্যই একটি মূল মান জোড়ের অভিধান
100r

1
@ আজুরস্পট কীটি হ্যাশযোগ্য কিছু হতে পারে, কীগুলি হ্যাশ দ্বারা অর্ডার করা হয়েছে সর্বোপরি, যা পাইথন 3 এ প্রতিটি রান পৃথক করে।
Tcll

54

এটি এতটা সহজ:

var blah = {}; // make a new dictionary (empty)

অথবা

var blah = {key: value, key2: value2}; // make a new dictionary with two pairs 

তারপর

blah.key3 = value3; // add a new key/value pair
blah.key2; // returns value2
blah['key2']; // also returns value2

1
@ কেনেকার আমার মনে হয় এরকম প্রশ্নগুলিতে ভুল উত্তর দেওয়া দরকারী। বিশেষত যদি কেউ ব্যাখ্যা করে যে তারা ভুল কেন, এটি একটি ভাল শিক্ষার উত্স।
সিজেব্রু

32

যেহেতু আপনি বলেছেন যে আপনি একটি অভিধানের অবজেক্ট চান (এবং কোনও অ্যারে নয় যেমন আমি কিছু বোঝে অনুমান করি) আমি মনে করি এটি আপনার পরে যা করছেন:

var input = [{key:"key1", value:"value1"},{key:"key2", value:"value2"}];

var result = {};

for(var i = 0; i < input.length; i++)
{
    result[input[i].key] = input[i].value;
}

console.log(result); // Just for testing

অ্যারেতে পুশ ব্যবহার করে অন্য সমাধানটি আমার ব্যবহারের জন্য কাজ করে তবে আমি ধরে নিই যে এটি চেষ্টা করলে এটিও কাজ করবে।
কেনেকার

2
অভিধানের অবজেক্টটি কী তা আমি ভুল বুঝে না ফেললে আপনার প্রশ্নটি তখন বিভ্রান্তিকর। আপনি কীভাবে আপনার অ্যারে থেকে কী দ্বারা কোনও মান পুনরুদ্ধার করবেন?
জেনমাস্টার

আমি এই অবজেক্টে JSON.stringify ব্যবহার করছি এবং তারপরে এটি এমভিসি 3 তে একটি কন্ট্রোলারের সাথে ধরা হচ্ছে এটি ঠিক তাই এটি স্ট্রিংফাই করার আগে এবং এটি প্রেরণ করার আগে এটি সঠিকভাবে ফর্ম্যাট করা হয়।
কেনেকার

23

জাভাস্ক্রিপ্ট এর Object হয় একটি অভিধান মত নিজেই। চাকা পুনর্নবীকরণের দরকার নেই।

var dict = {};

// Adding key-value -pairs
dict['key'] = 'value'; // Through indexer
dict.anotherKey = 'anotherValue'; // Through assignment

// Looping through
for (var item in dict) {
  console.log('key:' + item + ' value:' + dict[item]);
  // Output
  // key:key value:value
  // key:anotherKey value:anotherValue
}

// Non existent key
console.log(dict.notExist); // undefined

// Contains key?
if (dict.hasOwnProperty('key')) {
  // Remove item
  delete dict.key;
}

// Looping through
for (var item in dict) {
  console.log('key:' + item + ' value:' + dict[item]);
  // Output
  // key:anotherKey value:anotherValue
}

বেহালা



9

আমি অনুরূপ কিছু খুঁজছেন এই প্রশ্ন জুড়ে হাঁটা ঘটেছে। আমি যে উত্তর চেয়েছিলাম তা পেতে এটি পরীক্ষা চালানোর জন্য আমাকে যথেষ্ট তথ্য দিয়েছে। সুতরাং অন্য কেউ যদি জাভাস্ক্রিপ্ট অবজেক্টে কীভাবে গতিশীলভাবে কোনও} কী: 'মান'} যুক্ত করতে বা অনুসন্ধান করতে চান তা জানতে চাইলে এই পরীক্ষাটি আপনাকে জানা উচিত all

var dictionary = {initialkey: 'initialValue'};
var key = 'something';
var key2 =  'somethingElse';
var value = 'value1';
var value2 = 'value2';
var keyInitial = 'initialkey';

console.log(dictionary[keyInitial]);

dictionary[key] =value;
dictionary[key2] = value2;
console.log(dictionary);

আউটপুট

initialValue
{ initialkey: 'initialValue',
  something: 'value1',
  somethingElse: 'value2' }

2
এটি কোনও প্রশ্ন নয়। পরিবর্তে আপনার যা করা উচিত তা হ'ল প্রশ্ন জিজ্ঞাসা করুন এবং তারপরে নিজেই উত্তর দিন। এটি বোঝা এবং সংগঠিত করা আরও সহজ হবে।
সালমনকিলার

1
ধন্যবাদ @ স্যালমনকিলার আমার নিজের প্রশ্নটি লেখার জন্য সঠিক পরিভাষা সম্পর্কে আমি অনিশ্চিত ছিলাম এবং এটি বুঝতে পারার প্রত্যাশা করছিলাম তবে আমার অনুসন্ধানে আমি এগুলি ঘটলাম সমস্ত তথ্যই ছিল তবে বেশ কয়েকটি উত্তরের মধ্যে ছড়িয়ে গেছে তাই আমি এই প্রশ্নের ধারণার উত্তর দিয়েছিলাম আমার মতো একই জিনিসটি খুঁজছেন এমন কেউ এই প্রশ্নের জবাব দিতে পারে তার জন্য এটির উপায়
ব্যবহারকারী ২৩০১৪14৪

1
হাঃ হাঃ হাঃ. আমি এটি পর্যালোচনা করছিলাম এবং এটি উত্তরের পরিবর্তে কোনও প্রশ্নের মতো মনে হয়েছিল। দুঃখিত জনাব!
সালমনকিলার

এটি যুক্ত করার জন্য আপনাকে ধন্যবাদ। আপনি এটিকে উপরের উত্তরের মতো একটি ঝাঁকুনিতেও ফেলতে পারেন।
কেনেকার

8
var dictionary = {};//create new object
dictionary["key1"] = value1;//set key1
var key1 = dictionary["key1"];//get key1

কিছু যোগ করা পারফরম্যান্সের জন্য, আপনার key1 = dictionary.key1সূচকের চেয়ে রেফারেন্স করা উচিতkey1 = dictionary["key1"]
Tcll

4

আপনি একটি শ্রেণিবদ্ধ অভিধান তৈরি করতে পারেন যাতে আপনি অভিধানের তালিকার সাথে সহজেই ইন্টারঅ্যাক্ট করতে পারেন:

class Dictionary {
  constructor() {
    this.items = {};
  }
  has(key) {
    return key in this.items;
  }
  set(key,value) {
    this.items[key] = value;
  }
  delete(key) {
    if( this.has(key) ){
      delete this.items[key]
      return true;
    }
    return false;
  }
}

var d = new Dictionary();
d.set(1, "value1")
d.set(2, "value2")
d.set(3, "value3")
console.log(d.has(2));
d.delete(2);
console.log(d.has(2));


3

কী মান জোড় তৈরির জন্য এক লাইনার সম্পর্কে কীভাবে?

let result = { ["foo"]: "some value" };

এবং কিছু পুনরাবৃত্তকারী ফাংশন reduceগতিশীলভাবে একটি অ্যারে অভিধানে রূপান্তর করতে চায়

var options = [
  { key: "foo", value: 1 },
  { key: "bar", value: {id: 2, name: "two"} },
  { key: "baz", value: {["active"]: true} },
];

var result = options.reduce((accumulator, current) => {
  accumulator[current.key] = current.value;
  return accumulator;
}, {});

console.log(result);


3

আধুনিক জাভাস্ক্রিপ্টে (ES6 / ES2015) অভিধানের জন্য মানচিত্রের ডেটা স্ট্রাকচারটি ব্যবহার করা উচিত। ES6 এ মানচিত্রের ডেটা স্ট্রাকচার আপনাকে কী হিসাবে স্বচ্ছ মানগুলি ব্যবহার করতে দেয়।

const map = new Map();
map.set("true", 1);
map.set("false", 0);

আপনি এখনও ইএস 5 ব্যবহার করছেন, অভিধান তৈরি করার সঠিক উপায়টি নিম্নোক্ত উপায়ে প্রোটোটাইপ ছাড়াই অবজেক্ট তৈরি করা।

var map = Object.create(null);
map["true"]= 1;
map["false"]= 0;

প্রোটোটাইপ অবজেক্ট ছাড়াই ডিকশনারি তৈরির অনেক সুবিধা রয়েছে। নীচে ব্লগগুলি এই বিষয়ে পড়ার মতো।

অভি-প্যাটার্ন

বস্তু হিসাবে মানচিত্রগুলি


2

এটি আপনার শেষ কাঙ্ক্ষিত ফলাফলটি কী তা জানতে একটি টনকে সহায়তা করবে তবে আমি মনে করি এটি আপনি চান:

var vars = [{key:"key", value:"value"}];

vars.push({key: "newkey", value: "newvalue"})

2

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

  // example dict/json                  
  var iterateDict = {'record_identifier': {'content':'Some content','title':'Title of my Record'},
    'record_identifier_2': {'content':'Some  different content','title':'Title of my another Record'} };

  var array = [];

  // key to reduce the 'record' to
  var reduceKey = 'title';

  for(key in iterateDict)
   // ultra-safe variable checking...
   if(iterateDict[key] !== undefined && iterateDict[key][reduceKey] !== undefined)
    // build element to new array key
     array[key]=iterateDict[key][reduceKey];

1

একটি উন্নতি var dict = {}ব্যবহার করা হয় var dict = Object.create(null)

এটি একটি খালি বস্তুর যে তৈরি করবে না আছে Object.prototypeএটা প্রোটোটাইপ হিসেবে।

var dict1 = {};
if (dict1["toString"]){
    console.log("Hey, I didn't put that there!")
}
var dict2 = Object.create(null);
if (dict2["toString"]){
    console.log("This line won't run :)")
}

1

বিশ্বব্যাপী প্রথম অ্যারে ইনিশিয়াল করুন

var dict = []

অভিধানে অবজেক্ট যুক্ত করুন

dict.push(
     { key: "One",value: false},
     { key: "Two",value: false},
     { key: "Three",value: false});

Output : 
   [0: {key: "One", value: false}
    1: {key: "Two", value: false}
    2: {key: "Three", value: false}]

অভিধান থেকে অবজেক্ট আপডেট করুন

Object.keys(dict).map((index) => {        
  if (index == 1){
    dict[index].value = true
  }
});

Output : 
   [0: {key: "One", value: false},
    1: {key: "Two", value: true},
    2: {key: "Three", value: false}]

অভিধান থেকে অবজেক্ট মুছুন

Object.keys(dict).map((index) => {              
      if (index == 2){
        dict.splice(index)
      }
    });

Output : 
    [0: {key: "One", value: false},
     1: {key: "Two", value: true}]
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.