वस्तु का संपत्ति नाम प्राप्त करना


179

मैं सोच रहा था कि जावास्क्रिप्ट में किसी भी तरह से किसी वस्तु के माध्यम से लूप करने का कोई तरीका था।

for(var i in myObject) {
    // ...
}

लेकिन प्रत्येक संपत्ति का नाम इस तरह से प्राप्त करें।

for(var i in myObject) {
    separateObj[myObject[i].name] = myObject[i];
}

मुझे Google पर ऐसा कुछ भी नहीं मिल रहा है। वे अपने साथ चर के नामों को पारित करने के लिए कहते हैं, लेकिन यह एक विकल्प नहीं है कि मैं क्या हासिल करने की कोशिश कर रहा हूं।

आप जो भी सहायताकर सकें, उसके लिए धन्यवाद।


2
का डुप्लीकेट stackoverflow.com/questions/85992/...
wajiw

4
seperateहोना चाहिएseparate
जुआन मेंडेस

13
@JuanMendes धन्यवाद, सही किया गया। वाह, यह सवाल अतीत से एक विस्फोट है। मैं 'l' + new Array(1000).join('o') + 'ng'तब से एक तरह से आया हूं ।
ओलिकल

1
चेक किया गया उत्तर गलत है, Object.keys () विधि का उपयोग करें।
केविन फ्लोरिडा

चेक किया गया उत्तर और Object.keys () चीज अलग-अलग चीजें करते हैं, इसलिए आप जो चाहते हैं उसके आधार पर, कोई भी सही हो सकता है।
गाबे जॉनसन

जवाबों:


163

Object.keys () का प्रयोग करें :

var myObject = { a: 'c', b: 'a', c: 'b' };
var keyNames = Object.keys(myObject);
console.log(keyNames); // Outputs ["a","b","c"]

Object.keys() आपको इनपुट ऑब्जेक्ट से संबंधित संपत्ति के नामों की एक सरणी देता है।


3
अधिक विशेष रूप से, Object.keys (obj) संपत्ति के नामों की एक सरणी देता है, यानी कुंजियाँ, जो obj में पारित की जाती हैं।
एक शिक्षार्थी का नाम

1
इसके अलावा, Object.keys () केवल एन्युम्यूबल गुण लौटाते हैं, Object.getOwnProperties () सभी गुण वापस कर देंगे
bitfishxyz

192

i नाम है।

for(var name in obj) {
    alert(name);
    var value = obj[name];
    alert(value);
}

तो आप कर सकते हैं:

seperateObj[i] = myObject[i];

1
ऑब्जेक्ट गुणों को ब्रैकेट सिंटैक्स के माध्यम से एक्सेस किया जा सकता है। obj.prop1 obj ['prop1'] के समान है।
जोशियाह रूडेल

5
एक अच्छा अभ्यास उपयोग करने के लिए है HasOwnProperty जब for..in का उपयोग कर
Bakudan

5
@ बेकुडन को पता है कि आपका क्या मतलब है, लेकिन इसे लगाने का एक बेहतर तरीका यह है कि hasOwnPropertyअगर आपको विरासत में मिली संपत्ति नहीं चाहिए तो आपको इसका इस्तेमाल करना चाहिए । इस तरह आप आँख बंद करके किसी नियम का पालन नहीं कर रहे हैं। यह हो सकता है कि कुछ मामलों में आप वास्तव में विरासत में मिले गुणों को देखना चाहते हैं। ऑब्जेक्ट के स्वयं के गुणों के माध्यम से लूप करने का दूसरा तरीका Object.keys का उपयोग कर रहा हैObject.keys(obj).forEach(function(prop){ alert obj[prop]})
जुआन मेंडेस

@ जुआन मेंडेस हां, मेरा मतलब विरासत वाले गुणों से है। मैं मजबूर हूँ (दुर्भाग्य से) इस दृष्टिकोण का उपयोग करने के लिए है, क्योंकि IE8 ... Object.keys का समर्थन नहीं करता
Bakudan

17

अस्वीकरण मैंने होने के प्रश्न को गलत समझा: "क्या मैं उस संपत्ति के नाम को जान सकता हूं जो एक वस्तु से जुड़ी थी", लेकिन उत्तर छोड़ने के लिए चुना क्योंकि कुछ लोग यहां खोजते समय समाप्त हो सकते हैं।


नहीं, एक वस्तु कई गुणों से जुड़ी हो सकती है, इसलिए इसका नाम जानने का कोई तरीका नहीं है।

var obj = {a:1};
var a = {x: obj, y: obj}

Obj का नाम क्या होगा?

क्या आप वाकई केवल लूप के लिए संपत्ति का नाम नहीं चाहते हैं?

for (var propName in obj) {
  console.log("Iterating through prop with name", propName, " its value is ", obj[propName])
}

@ChadSchouggins आपने जो कहा है वह सच है, लेकिन यह वह सवाल नहीं है जिसका मैं जवाब दे रहा हूं, क्योंकि हां, आप एक वस्तु के माध्यम से लूप कर सकते हैं प्रत्येक संपत्ति का नाम प्राप्त करें। मैं एक प्रश्न का उत्तर दे रहा हूं जो ओपी का उद्देश्य नहीं हो सकता है, मैं सिर्फ यह स्पष्ट करना चाहता था कि कई गुण एक ही वस्तु को इंगित कर सकते हैं।
जुआन मेंडेस

7

आप आसानी से वस्तुओं में पुनरावृति कर सकते हैं

उदाहरण: यदि वस्तु var a = {a: 'apple', b: 'ball', c: 'cat', d: 'doll', e: 'हाथी'};

Object.keys(a).forEach(key => {
   console.log(key) // returns the keys in an object
   console.log(a[key])  // returns the appropriate value 
})

6

स्थिति द्वारा किसी प्रत्यक्ष संपत्ति तक पहुंचने के लिए ... आम तौर पर संपत्ति के लिए उपयोगी [0] ... तो यह आगे के बारे में जानकारी रखता है ... या पहले लोड किए गए बाहरी मॉड्यूल के लिए नोड.जेएस की आवश्यकता है। [0] , आदि आदि।

Object.keys( myObject )[ 0 ]
Object.keys( myObject )[ 1 ]
...
Object.keys( myObject )[ n ]

4

"Object.keys (obj)" के अलावा, हमारे पास ... "इन लूप" के लिए बहुत ही सरल है - जो किसी ऑब्जेक्ट के अनगिनत संपत्ति नामों पर लूप करता है।

const obj = {"fName":"John","lName":"Doe"};

for (const key in obj) {
    //This will give key
      console.log(key);
    //This will give value
    console.log(obj[key]);
    
}


3

ऑब्जेक्ट की संपत्ति या "सरणी कुंजी" या "सरणी इंडेक्स" प्राप्त करने के लिए आपकी मूल भाषा क्या है इसके आधार पर ..... Object.keys () विधि का उपयोग करें।

महत्वपूर्ण, यह केवल "आधुनिक ब्राउज़र" के साथ संगत है:

तो अगर आपकी वस्तु कहा जाता है, myObject ...

var c = 0;
for(c in myObject) {
    console.log(Object.keys(myObject[c]));
}

Walla! यह निश्चित रूप से नवीनतम फ़ायरफ़ॉक्स और ie11 और क्रोम में काम करेगा ...

यहाँ MDN https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys पर कुछ दस्तावेज़ हैं


2

ईएस 5 में

ईजी आपके पास इस तरह की वस्तु है:

var ELEMENTS = {
    STEP_ELEMENT: { ID: "0", imageName: "el_0.png" },
    GREEN_ELEMENT: { ID: "1", imageName: "el_1.png" },
    BLUE_ELEMENT: { ID: "2", imageName: "el_2.png" },
    ORANGE_ELEMENT: { ID: "3", imageName: "el_3.png" },
    PURPLE_ELEMENT: { ID: "4", imageName: "el_4.png" },
    YELLOW_ELEMENT: { ID: "5", imageName: "el_5.png" }
};

और अब यदि आप एक फ़ंक्शन चाहते हैं कि यदि आप '0' को एक परम के रूप में पास करते हैं - 'STEP_ELEMENT' पाने के लिए, यदि '2' को 'BLUE_ELEMENT' और इसी तरह से प्राप्त करें

function(elementId) {
    var element = null;

    Object.keys(ELEMENTS).forEach(function(key) {
        if(ELEMENTS[key].ID === elementId.toString()){
            element = key;
            return;
        }    
    });

    return element;
}

यह शायद समस्या का सबसे अच्छा समाधान नहीं है, लेकिन यह आपको यह करने के लिए एक विचार देने के लिए अच्छा है।

चीयर्स।



0

जब आप के लिए / पाश में आप पहले डाल, मैं संपत्ति का नाम है। इसलिए आपके पास myObject [i] कर संपत्ति का नाम, i, और मान तक पहुँच है।


0

ये समाधान भी काम करते हैं।

// Solution One
function removeProperty(obj, prop) {
  var bool;
  var keys = Object.keys(obj);
  for (var i = 0; i < keys.length; i++) {
    if (keys[i] === prop) {
      delete obj[prop];
      bool = true;
    } 
  }
  return Boolean(bool);
}


//Solution two
function removeProperty(obj, prop) {
  var bool;
  if (obj.hasOwnProperty(prop)) {
      bool = true;
      delete obj[prop];
  }
  return Boolean(bool);
}

0

Object.keys()एक से गुण प्राप्त करने के लिए फ़ंक्शन का उपयोग करना Object, और यह उदाहरण के लिए, नाम से संपत्ति खोजने में मदद कर सकता है:

const Products = function(){
    this.Product = "Product A";
    this.Price = 9.99;
    this.Quantity = 112;
};

// Simple find function case insensitive
let findPropByName = function(data, propertyName){
 let props = [];
 Object.keys(data).forEach(element => {
    return props.push(element.toLowerCase());
  });
  console.log(props);
  let i = props.indexOf(propertyName.toLowerCase());

  if(i > -1){
    return props[i];
  }
  return false;
};

// calling the function
let products = new Products();
console.log(findPropByName(products, 'quantity'));

-1

त्वरित और गंदा:

function getObjName(obj) {
  return (wrap={obj}) && eval('for(p in obj){p}') && (wrap=null);
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.