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

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

但是像这样获取每个属性的名称。

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

我在谷歌上找不到类似的。他们说要传递变量的名称,但这不是我要实现的一个选项。

谢谢你能提供的任何帮助。


当前回答

IN ES5

例如,你有这样的对象:

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

这可能不是这个问题的最佳解决方案,但它能给你一个如何去做的想法。

欢呼。

其他回答

免责声明 我把这个问题误解为:“我能知道一个对象所附加的属性名吗?”,但选择留下答案,因为有些人在搜索时可能会在这里结束。


不,一个对象可以附加到多个属性,因此它无法知道自己的名称。

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 ={答:“苹果”,乙:“球”,c:‘猫’,d:“娃娃”,e:‘大象’};

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

又快又脏:

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

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

IN ES5

例如,你有这样的对象:

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

这可能不是这个问题的最佳解决方案,但它能给你一个如何去做的想法。

欢呼。