簡體   English   中英

獲取對象的屬性名稱

[英]Getting the object's property name

我想知道 JavaScript 中是否有任何方法可以循環遍歷這樣的對象。

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

但是像這樣獲取每個屬性的名稱。

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

我似乎無法在谷歌上找到類似的東西。 他們說要與他們一起傳遞變量的名稱,但這不是我想要實現的選擇。

謝謝你的盡心幫助。

i是名字。

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

所以你可以這樣做:

seperateObj[i] = myObject[i];

使用Object.keys():

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

Object.keys()為您提供屬於輸入對象的屬性名稱數組。

免責聲明我誤解了這個問題:“我可以知道一個對象所附加的屬性名稱嗎”,但選擇留下答案,因為有些人可能會在搜索時到這里。


不,一個對象可以附加到多個屬性,因此它無法知道它的名稱。

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

obj 的名字是什么?

您確定您不只是想要 for 循環中的屬性名稱嗎?

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

您可以輕松地迭代對象

例如:如果對象是 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 
})

用於按位置直接訪問對象屬性...通常對屬性 [0] 有用...因此它保存有關進一步...的信息...或在 node.js 'require.cache[0]' 中為第一個加載的外部模塊等等等等。

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

除了“Object.keys(obj)”之外,我們還有非常簡單的“for...in”循環——它遍歷對象的可枚舉屬性名稱。

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

要根據您的母語是什么來獲取對象的屬性或“數組鍵”或“數組索引”..... 使用 Object.keys() 方法。

重要的是,這僅與“現代瀏覽器”兼容:

所以如果你的對象被調用,myObject...

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

瓦拉! 這肯定適用於最新的 firefox 和 ie11 和 chrome ...

這是 MDN 上的一些文檔https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys

在 ES5

EG 你有這樣的對象:

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

這可能不是問題的最佳解決方案,但它很好地讓您知道如何去做。

干杯。

截至 2018 年,您可以按照Developer Mozilla 文檔中的描述使用Object.getOwnPropertyNames()

const object1 = {
  a: 1,
  b: 2,
  c: 3
};

console.log(Object.getOwnPropertyNames(object1));
// expected output: Array ["a", "b", "c"]

當你先執行 for/in 循環時,i 是屬性名稱。 因此,您擁有屬性名稱 i,並通過執行 myObject[i] 來訪問該值。

這些解決方案也有效。

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

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

快速和骯臟:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM