获取对象的属性名称

2020/10/21 21:41 · javascript ·  · 0评论

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

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

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

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

我似乎在Google上找不到类似的东西。他们说与他们一起传递变量的名称,但这不是我想要实现的选择。

谢谢你尽你所能的帮助。

使用Object.keys():

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

Object.keys() 给您一个属于输入对象的属性名称数组。

i 是名字。

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

因此,您可以执行以下操作:

seperateObj[i] = myObject[i];

免责声明
我误解了这个问题:“我能知道对象附加的属性名称吗”,但是选择留下答案,因为有些人可能会在此处搜索。


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

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/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/keys

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

这可能不是解决问题的最佳方法,但可以使您了解如何解决问题。

干杯。

从2018年开始,您可以Object.getOwnPropertyNames()按照Developer Mozilla文档中所述使用

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

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

当您进行for / in循环时,首先要设置属性名称。因此,您具有属性名称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);
}
本文地址:http://javascript.askforanswer.com/huoquduixiangdeshuxingmingcheng.html
文章标签: ,   ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!