De eigenschapsnaam van het object ophalen

Ik vroeg me af of JavaScript op een of andere manier door een dergelijk object kan lopen.

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

Maar zoek de naam van elke eigenschap op deze manier op.

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

Ik kan zoiets niet vinden op Google. Ze zeggen dat ze de namen van de variabelen mee moeten geven, maar dit is geen optie voor wat ik probeer te bereiken.

Bedankt voor alle hulp die je kunt bieden.


Antwoord 1, autoriteit 100%

iis de naam.

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

Dus je zou kunnen doen:

seperateObj[i] = myObject[i];

Antwoord 2, autoriteit 96%

Gebruik Object.keys():

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

Snippet uitvouwen


Antwoord 3, autoriteit 10%

Disclaimer
Ik heb de vraag verkeerd begrepen: “Kan ik de eigenschapsnaam weten waaraan een object was gekoppeld”, maar koos ervoor om het antwoord achter te laten, omdat sommige mensen hier terecht kunnen komen terwijl ze ernaar zoeken.


Nee, een object kan aan meerdere eigenschappen worden gekoppeld, dus het kan zijn naam niet weten.

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

Wat zou de naam van obj zijn?

Weet je zeker dat je niet alleen de naam van de eigenschap uit de for-lus wilt?

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

Antwoord 4, autoriteit 6%

u kunt gemakkelijk herhalen in objecten

bijv: als het object is
var a = {a:’apple’, b:’ball’, c:’cat’, d:’doll’, e:’elephant’};

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

Antwoord 5, autoriteit 3%

voor directe toegang tot een objecteigenschap per positie…
over het algemeen handig voor eigenschap [0]… dus het bevat informatie over de verdere…
of in node.js ‘require.cache[0]’ voor de eerste geladen externe module, etc. etc.

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

Antwoord 6, autoriteit 2%

Anders dan “Object.keys( obj )” hebben we een heel eenvoudige “for…in” lus – die doorloopt over opsombare eigenschapsnamen van een object.

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]);
}

Snippet uitvouwen


Antwoord 7

Om de eigenschap van het object of de “array key” of “array index” te krijgen, afhankelijk van wat uw moedertaal is… Gebruik de Object.keys() methode.

Belangrijk, dit is alleen compatibel met “Moderne browsers”:

Dus als uw object wordt aangeroepen, myObject…

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

Walla! Dit zal zeker werken in de nieuwste Firefox en ie11 en Chrome…

Hier is wat documentatie bij MDN
https://developer.mozilla.org/en -US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys


Antwoord 8

IN ES5

Bijvoorbeeld je hebt dit soort object:

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" }
};

En als je nu een functie wilt hebben die als je ‘0’ als parameter doorgeeft – om ‘STEP_ELEMENT’ te krijgen, als ‘2’ om ‘BLUE_ELEMENT’ te krijgen en zo voor

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

Dit is waarschijnlijk niet de beste oplossing voor het probleem, maar het is goed om u een idee te geven hoe u het moet doen.

Proost.


Antwoord 9

Vanaf 2018 kunt u gebruik maken van Object.getOwnPropertyNames()zoals beschreven in Ontwikkelaar Mozilla-documentatie

const object1 = {
  a: 1,
  b: 2,
  c: 3
};
console.log(Object.getOwnPropertyNames(object1));
// expected output: Array ["a", "b", "c"]

Antwoord 10

Als je de for/in-lus doet die je eerst invoert, is i de naam van de eigenschap. Dus je hebt de eigenschapsnaam, i, en toegang tot de waarde door myObject[i] te doen.


Antwoord 11

Deze oplossingen werken ook.

// 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);
}

Antwoord 12

De functie Object.keys()gebruiken voor het verkrijgen van eigenschappen van een Object, en het kan helpen bij het zoeken naar eigenschappen op naam, bijvoorbeeld:

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'));

Antwoord 13

Snel & vies:

function getObjName(obj) {
  return (wrap={obj}) && eval('for(p in obj){p}') && (wrap=null);
}

Other episodes