সূচক দ্বারা অ-সংখ্যাগত অবজেক্টের বৈশিষ্ট্য অ্যাক্সেস করবেন?


88

আমার যদি এর মতো একটি অ্যারে থাকে:

var arr = ['one','two','three'];

আমি এটি করে বিভিন্ন অংশে অ্যাক্সেস করতে পারি:

console.log(arr[1]);

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

উদাহরণ:

var obj = {
    'something' : 'awesome',
    'evenmore'  : 'crazy'
},
jbo = {
    'evenmore'  : 'crazy',
    'something' : 'awesome'
};

আমি কীভাবে প্রতিটি সামগ্রীর জন্য প্রথম সম্পত্তি পেতে পারি - সম্পত্তির নামটি স্পষ্টভাবে ব্যবহার না করে - "কিছু" থেকে obj"এমনকি" এমনকি " jboসম্পত্তি " কীভাবে পেতে পারি ?

এখন, আপনারা কয়েকজন মনে করছেন আমি এমন কিছুর পরে রয়েছি:

console.log(obj['something']);

এটি ক্ষেত্রে নয়, আমি বিশেষত প্রথম উদাহরণের মতোই সূচককে লক্ষ্য করতে চাইছি - যদি এটি সম্ভব হয়।


4
"অবজেক্ট অ্যারে" বলতে আপনার অর্থ কী? একটি বিন্যাস হল একটি বস্তুর। আপনি কি কেবলমাত্র একটি অবজেক্টকে বোঝান যা অ্যারে নয়, বা আপনার অর্থ কোনও বস্তুর অ্যারে বোঝায়? এবং কীভাবে আপনার প্রশ্নের সাথে jQuery ফ্যাক্টর রয়েছে? আপনার একমাত্র কোড উদাহরণটি সেই অংশটিকে চিত্রিত করে যা আপনি ইতিমধ্যে কীভাবে করতে জানেন। সমস্যাটি চিত্রিত করে এমন কিছু কোড দেওয়ার বিষয়ে ।
ব্যবহারকারী 113716

@ Ӫ _._ Ӫ আমি jQuery ট্যাগ করার কারণটি হল একটি বিস্তৃত শ্রোতা পাওয়া, আমি বুঝতে পেরেছি যে jQuery জানে তার কাছে অবশ্যই অ্যারের সম্পর্কে বুঝতে হবে, আমার প্রশ্নের বিপরীতে নয়, এটি পাঠ্যপুস্তকের স্টাফ।
ড্যারিল

4
প্রকৃতপক্ষে আমি বলতে চাই যে আরও বেশি লোক jQuery "জানে" এবং জাভাস্ক্রিপ্ট না জেনে এর বিপরীতে (কমপক্ষে জাভাস্ক্রিপ্ট জানেন এমন লোকেরা jQuery সহজেই বুঝতে সক্ষম হওয়া উচিত) .... এবং আপনার আসল প্রশ্নের সাথে সম্মতি সহ: না, আপনি সূচক দ্বারা অবজেক্ট বৈশিষ্ট্য অ্যাক্সেস করতে পারবেন না। তাদের আদেশ দেওয়া হয় না।
ফেলিক্স ক্লিং

4
"... আমি বুঝতে পেরেছি যে jQuery জানে তার অবশ্যই অ্যারের সম্পর্কে বুঝতে হবে ..." আমি এটিতে বাজি ধরব না।
ব্যবহারকারী 113716

4
@ ব্রাগ্রামার: এই প্রশ্নের jQuery এর সাথে কোনও সম্পর্ক নেই, তাই jQuery ট্যাগটি অনুপযুক্ত।
আউটিস

উত্তর:


127

"সম্ভব হলে প্রথম উদাহরণের মতো আমিও বিশেষভাবে সূচককে লক্ষ্য করতে চাইছি।"

না, এটা সম্ভব নয়।

আপনি যে নিকটতম পেতে পারেন তা হ'ল অবজেক্টের কীগুলির একটি অ্যারে পাওয়া এবং এটি ব্যবহার করুন:

var keys = Object.keys( obj );

... তবে কোনও গ্যারান্টি নেই যে কীগুলি আপনার সংজ্ঞায়িত ক্রমে ফিরে আসবে। সুতরাং এটি দেখতে মত শেষ হতে পারে:

keys[ 0 ];  // 'evenmore'
keys[ 1 ];  // 'something'

6
Object.keys()আপনি যদি বস্তুর বিষয়বস্তুগুলি জানেন তবে নির্ভরযোগ্যভাবে ব্যবহার করা যেতে পারে। আরো এখানে বিস্তারিত: stackoverflow.com/questions/280713/...
cronoklee

4
অবজেক্ট.কিজ () পদ্ধতিটি প্রদত্ত বস্তুর নিজস্ব সংখ্যাযুক্ত বৈশিষ্ট্যগুলির একটি অ্যারে প্রদান করে, একই ক্রমে লুপের জন্য ... এর জন্য প্রদত্ত (পার্থক্যটি যে প্রোটোটাইপ শৃঙ্খলে একটি ইন-লুপ লুপ হিসাবে বৈশিষ্ট্যগুলি গণনা করে) আমরা হব). বিকাশকারী.মোজিলা.আর.ইন
ডকস / ওয়েব / জাভা স্ক্রিপ্ট / রেফারেন্স /

6
সবকিছুই সম্ভব
ক্যাস ব্লুম

48

আমি এটি করার একমাত্র উপায় হ'ল এমন একটি পদ্ধতি তৈরি করা যা আপনাকে ব্যবহার করে সম্পত্তি দেয় Object.keys();

var obj = {
    dog: "woof",
    cat: "meow",
    key: function(n) {
        return this[Object.keys(this)[n]];
    }
};
obj.key(1); // "meow"

ডেমো: http://jsfiddle.net/UmkVn/

এটি ব্যবহার করে সমস্ত অবজেক্টে এটি প্রসারিত করা সম্ভব হবে Object.prototype;তবে এটি সাধারণত প্রস্তাবিত নয়।

পরিবর্তে, একটি ফাংশন সহায়ক ব্যবহার করুন:

var object = {
  key: function(n) {
    return this[ Object.keys(this)[n] ];
  }
};

function key(obj, idx) {
  return object.key.call(obj, idx);
}

key({ a: 6 }, 0); // 6

4
এটি দুর্দান্ত এবং আকর্ষণীয় কাজ করে! কেন এটি গৃহীত উত্তর নয়? আপনার সম্ভবত return this[Object.keys(this)[n]];এটি জেনেরিক করতে ব্যবহার করা উচিত ।
ক্রোনোকলি

4
হ্যালো ২০১ 2016, আমরা ভবিষ্যতের লোকেরা এখনও মনে করি এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। দুর্দান্ত সমাধান
mhodges

এটি গ্রহণযোগ্য উত্তর না হওয়ার কারণ হ'ল এসআই 6 অবধি অবজেক্ট.কিজের ক্রমটি গ্যারান্টিযুক্ত নয়। সুতরাং, যদিও কোডটি কয়েকটি জেএস ইঞ্জিনে কাজ করে, সেগুলির মধ্যেও কাজ করার গ্যারান্টি নেই। stackoverflow.com/questions/5525795/...
ptoinson

13

আপনি যদি ব্যবহার Object.values()করতে না চান তবে আপনি এই পদ্ধতিটি ব্যবহার করতে পারেন Object.keys()

Object.keys()যে পদ্ধতিটি কোনও প্রদত্ত বস্তুর নিজস্ব অগণিত বৈশিষ্ট্যের অ্যারে প্রদান করে তার বিপরীতে যেমন উদাহরণস্বরূপ:

const object1 = {
 a: 'somestring',
 b: 42,
 c: false
};

console.log(Object.keys(object1));

নিম্নলিখিত অ্যারে মুদ্রণ করতে হবে:

[ 'a', 'b', 'c' ]

Object.values()পদ্ধতি একটি প্রদত্ত বস্তু নিজস্ব গণনীয় সম্পত্তির একটি বিন্যাস দেখায় values

সুতরাং আপনার যদি একই জিনিস থাকে তবে পরিবর্তে মানগুলি ব্যবহার করুন,

const object1 = {
 a: 'somestring',
 b: 42,
 c: false
};

console.log(Object.values(object1));

আপনি নিম্নলিখিত অ্যারে পাবেন:

[ 'somestring', 42, false ]

সুতরাং আপনি যদি অ্যাক্সেস করতে চান object1.bতবে পরিবর্তে একটি সূচক ব্যবহার করে আপনি ব্যবহার করতে পারেন:

Object.values(object1)[1] === 42

আপনি এই পদ্ধতি সম্পর্কে এখানে আরও পড়তে পারেন ।


4
এই বিষয়ে প্রস্তাবিত মধ্যে এই পদ্ধতিটি সবচেয়ে সংক্ষিপ্ত এবং সবচেয়ে মার্জিত বলে মনে হচ্ছে।
পেট্রো ফ্রাঙ্কো

5
var obj = {
    'key1':'value',
    '2':'value',
    'key 1':'value'
}

console.log(obj.key1)
console.log(obj['key1'])
console.log(obj['2'])
console.log(obj['key 1'])

// will not work
console.log(obj.2)

সম্পাদনা করুন:

"সম্ভব হলে প্রথম উদাহরণের মতো আমিও বিশেষভাবে সূচককে লক্ষ্য করতে চাইছি।"

প্রকৃতপক্ষে 'সূচক' মূল বিষয়। আপনি যদি কোনও কীটির অবস্থান সঞ্চয় করতে চান তবে এটি পরিচালনা করার জন্য আপনার একটি কাস্টম অবজেক্ট তৈরি করতে হবে।


আমি জানি যে আপনি কী দ্বারা এটি অ্যাক্সেস করতে পারবেন, এটি আমি যা চাইছিলাম তা নয়।
ড্যারিল

@ ব্রাগ্রামার: আপনার প্রশ্নটি অস্পষ্ট, সুতরাং এই পোস্টটি লিখিত হিসাবে প্রশ্নের উত্তর দেয় pot
আউটিস


2

কীগুলির অ্যারে পান, এটিকে বিপরীত করুন, তারপরে আপনার লুপটি চালান

  var keys = Object.keys( obj ).reverse();
  for(var i = 0; i < keys.length; i++){
    var key = keys[i];
    var value = obj[key];
    //do stuff backwards
  }

1

আপনি এমন একটি অ্যারে তৈরি করতে পারেন যা আপনার অবজেক্ট ক্ষেত্রগুলিতে ভরাট হবে এবং অ্যারেতে একটি সূচক ব্যবহার করতে পারে এবং এর মাধ্যমে অবজেক্টের বৈশিষ্ট্য অ্যাক্সেস করতে পারে

propertiesName:['pr1','pr2','pr3']

this.myObject[this.propertiesName[0]]

1

আমি এগিয়ে গিয়েছিলাম এবং আপনার জন্য একটি অনুষ্ঠান করেছি:

 Object.prototype.getValueByIndex = function (index) {
     /*
         Object.getOwnPropertyNames() takes in a parameter of the object, 
         and returns an array of all the properties.
         In this case it would return: ["something","evenmore"].
         So, this[Object.getOwnPropertyNames(this)[index]]; is really just the same thing as:
         this[propertyName]
    */
    return this[Object.getOwnPropertyNames(this)[index]];
};

let obj = {
    'something' : 'awesome',
    'evenmore'  : 'crazy'
};

console.log(obj.getValueByIndex(0)); // Expected output: "awesome"


4
আপনার পদ্ধতিতে কী করা হচ্ছে তা আপনি ব্যাখ্যা করতে পারেন?
রাহুল ভোবে

আমি কোডটিতে কিছু মন্তব্য যুক্ত করেছি, যাতে আপনি বুঝতে পারছেন যে কী হচ্ছে।
স্ট্যাকজিক

0

আপনি যদি নিশ্চিত না হন যে অবজেক্ট.কিজ () আপনাকে সঠিক ক্রমে কীগুলি ফেরত দিতে চলেছে, আপনি পরিবর্তে এই যুক্তিটি চেষ্টা করতে পারেন

var keys = []
var obj = {
    'key1' : 'value1',
    'key2' : 'value2',
    'key3' : 'value3',
}
for (var key in obj){
    keys.push(key)
}
console.log(obj[keys[1]])
console.log(obj[keys[2]])
console.log(obj[keys[3]])
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.