কীভাবে আমি জাভাস্ক্রিপ্ট অবজেক্টে অ্যাক্সেস করতে পারি যার অবজেক্টের কীতে ফাঁকা স্থান রয়েছে?


112

আমার একটি জাভাস্ক্রিপ্ট অবজেক্ট রয়েছে যা দেখতে এরকম কিছু দেখাচ্ছে:

var myTextOptions = {
  'cartoon': {
     comic: 'Calvin & Hobbes',
     published: '1993'
  },
  'character names': {
    kid: 'Calvin',
    tiger: 'Hobbes'
  }
}

আমি cartoonসহজেই myTextOptions.cartoon.comicবা যা কিছু ব্যবহারের বৈশিষ্ট্যগুলি অ্যাক্সেস করতে পারি । তবে আমি অ্যাক্সেসের জন্য সিনট্যাক্সটি সঠিকভাবে পেতে সক্ষম হইনি kid। আমি ভাগ্য ছাড়াই নিম্নলিখিত চেষ্টা করেছি:

myTextOptions.character names.kid
myTextOptions."character names".kid
myTextOptions.character\ names.kid
myTextOptions.'character names'.kid
myTextOptions.["character names"].kid
myTextOptions.character%20names.kid

গুগল ক্রোমে, আপনি যদি উপাদানটি পরিদর্শন করতে যান এবং তারপরে জসন ফাইল ডেটা সেটগুলি ঘুরে দেখেন তবে প্রতিটি পৃথক ডেটা সেটের পথটি দেখিয়ে একটি টুলটিপ উপস্থিত হবে এবং এটি আপনাকে আপনার ক্লিপবোর্ডে পাথটি অনুলিপি করার বিকল্প দেয়। মাত্র একটি এফওয়াইআই
সাইমন সুহ

দুর্দান্ত উত্তর। তবে শেষ বিকল্পটি আমার সাথে কাজ করে নি।
ড্যানিয়েল বানদীরা

আরও ... যখন আমি myTextOptions.character% 20n.kid টাইপ করি তখন 'NaN' দেয়। সর্বশেষ সম্পত্তির নাম (ছাগলছানা) কিছু যায় আসে না, অন্য কোনও হওয়া উচিত। আমি ফায়ারফক্স কোয়ান্টাম 8.3.0esr (64-বিট) ডেবিয়ান 9
ড্যানিয়েল বান্দিরা

উত্তর:


231

ইসিএমএস স্ক্রিপ্টগুলি "ব্র্যাকেট স্বরলিপি" ব্যবহার করুন:

myTextOptions[ 'character names' ].kid;

আপনি এই স্বরলিপিটি যে কোনও উপায়ে, পড়া এবং লেখার জন্য ব্যবহার করতে পারেন।

আরও তথ্যের জন্য এখানে পড়ুন:


2
জুলিও ওপিতে উল্লেখ করেছে যে তিনি ইতিমধ্যে ব্যবহার করার চেষ্টা করেছিলেন myTextOptions.["character names"].kid- এই প্রশ্নের সম্পূর্ণতার জন্য, আমি ভাবছিলাম যে এটি কেন কাজ করে না?
জেমস_এফ

7
@ জেমস_এফ কারণ তিনি একইসাথে ব্যবহার করেছেন dot notation। কেবলমাত্র একটি অ্যাক্সেসরের নির্দেশিকা থাকতে হবে।
jAndy

2
ওহ, হ্যাঁ, দুঃখিত - খুব শক্ত লাগছিল আমি বন্ধুর আগে অতিরিক্ত বিন্দুটি দেখতে পেলাম না! - ধন্যবাদ
জেমস_এফ

কেউ কি জানেন যে এটি ভাল বা খারাপ অনুশীলন অবজেক্ট কীগুলিতে স্পেস ব্যবহার করে?
জুয়ান পি। অর্টিজ

1
@ জুয়ানপি.আরটিজ, যদি আপনি টাইপ স্ক্রিপ্ট ব্যবহার করে থাকেন তবে এটি টাইপ স্ক্রিপ্ট সংকলন পরীক্ষাটি হারাবেন।
রোসদী কাসিম

4

জাভাস্ক্রিপ্ট অবজেক্টের বৈশিষ্ট্যগুলিও বন্ধনী সংকেত ব্যবহার করে অ্যাক্সেস করা বা সেট করা যেতে পারে (আরও তথ্যের জন্য সম্পত্তি অ্যাক্সেসর দেখুন )। প্রতিটি সম্পত্তি একটি স্ট্রিং মানের সাথে সম্পর্কিত যা এটি অ্যাক্সেস করার জন্য ব্যবহার করা যেতে পারে Ob সুতরাং, উদাহরণস্বরূপ, আপনি নিম্নলিখিত হিসাবে মাইকার অবজেক্টের বৈশিষ্ট্যগুলি অ্যাক্সেস করতে পারেন:

myCar['make'] = 'Ford';
myCar['model'] = 'Mustang';
myCar['year'] = 1969;

আরও জন্য, জেএস অবজেক্টের সাথে কাজ করা পড়ুন ।

সুতরাং আপনার ক্ষেত্রে এটি myTextOptions['character names'].kid;


2

আমরা এর মাধ্যমে এটিও করতে পারি -

myTextOptions[ 'character names' ]['kid'];

এটি কার্যকর যখন আমাদের কাছে ক্রমাগত কী থাকে যাতে স্থান থাকে।


0

আমাকে আমার সমাধানটি এখানে ভাগ করতে দিন আমি টাইপ স্ক্রিপ্টের সাথে VueJs ব্যবহার করছি।

আমি পার্থক্য করতে এবং ইউআইতে প্রদর্শন করার জন্য জেসনকে অনুসরণ করেছি

 {
    "Brand": "MAMA",
    "Variety": "Instant Noodles Coconut Milk Flavour",
    "Style": "Pack",
    "Country": "Myanmar",
    "Stars": 5,
    "Top Ten": "2016 #10"
  },

আমি টাইপস্ক্রিপ্টে নীচের মডেলটির হস্তক্ষেপ তৈরি করেছি

export interface Resto {
    Brand: string;
    Variety: string;
    Style: string;
    Country: string;
    Stars: any;
    Top_Ten: string;
    }

আমি এপিআই হিসাবে কল করেছি:

   public async getListOfRestos() {
    return (await fetch(
      `http://starlord.hackerearth.com/TopRamen`,
      {
        method: "get",
        credentials: "include",
        headers: {
          "Content-Type": "application/json",
        },
        body: undefined
      }
    )) as IFetchResponse<Resto[]>;
  } 

জেএসএক্সে ব্যবহৃত:

 <div class="parent" v-for="(x,i) in listOfRestos" :key="i">
      <div>{{x.Brand}}</div>
      <div>{{x.Variety}}</div>
      <div>{{x.Style}}</div>
      <div>{{x.Country}}</div>
      <div>{{x.Stars}}</div>
      <div>{{x['Top Ten']}}</div>
  </div>

একই বিক্রিয়া এবং কৌণিক কাজ করতে পারেন।


0

এই কোড ব্যবহার করুন

myTextOptions.["character names"]["kid"];


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