获取对象的属性名称

时间:2010-11-23 19:59:53

标签: javascript object properties

我想知道JavaScript中是否有任何方法可以循环遍历这样的对象。

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

但是要得到每个属性的名称。

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

我似乎无法在Google上找到类似的内容。他们说用它们传递变量的名称,但这不是我想要实现的选项。

感谢您提供的任何帮助。

12 个答案:

答案 0 :(得分:185)

i就是这个名字。

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

所以你可以这样做:

seperateObj[i] = myObject[i];

答案 1 :(得分:129)

使用Object.keys():



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




Object.keys()为您提供属于输入对象的属性名称数组。

答案 2 :(得分:17)

<强>声明 我误解了这个问题:“我能知道一个对象附加到的属性名称”,但是选择留下答案,因为有些人可能会在搜索时结束这里。


不,对象可以附加到多个属性,因此无法知道其名称。

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

答案 3 :(得分:6)

您可以轻松地在对象中进行迭代

例如:如果对象是 var a = {a:&#39; apple&#39;,b:&#39; ball&#39;,c:&#39; cat&#39;,d:&#39; doll&#39;,e: &#39;象&#39;};

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

答案 4 :(得分:3)

按位置直接访问对象属性... 通常对属性[0]有用...所以它保存有关进一步的信息...... 或者在node.js&#39; require.cache [0]&#39;对于第一个加载的外部模块等等。

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

答案 5 :(得分:2)

在ES5中

E.G。你有这种对象:

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

现在如果你想要一个能够通过&#39; 0&#39;作为一个参数 - 获得'STEP_ELEMENT&#39;,如果&#39; 2&#39;得到&#39; BLUE_ELEMENT&#39;等等

function(elementId) {
    var element = null;

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

    return element;
}

这可能不是问题的最佳解决方案,但很高兴能让您了解如何做到这一点。

干杯。

答案 6 :(得分:2)

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

答案 7 :(得分:1)

自2018年起,您可以按照Developer Mozilla Documentation

中的说明使用Object.getOwnPropertyNames()
const object1 = {
  a: 1,
  b: 2,
  c: 3
};

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

答案 8 :(得分:0)

当您执行for / in循环时,首先放置,我是属性名称。因此,您拥有属性名称i,并通过执行myObject [i]来访问该值。

答案 9 :(得分:0)

这些解决方案也有效。

sid

答案 10 :(得分: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'));

答案 11 :(得分:-1)

快速&amp;脏:

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