【问题标题】:Javascript get object key nameJavascript获取对象键名
【发布时间】:2012-04-26 13:19:10
【问题描述】:

我如何获得关注的键名?例如我想要“button1”和“button2”?

var buttons = {
    button1: {
        text: 'Close',
        onclick: function(){

        }
    },
    button2: {
        text: 'Close2',
        onclick: function(){

        }
    }
}

var i;
for(i in buttons){
    if(buttons.hasOwnProperty(i)){
        alert(buttons[i].text);
    }
} 

我尝试使用.push(),尽管这不起作用。

【问题讨论】:

  • 如果您的键名实际上是button1button2 等,您可能需要将buttons 设为一个数组

标签: javascript


【解决方案1】:

如果你稍微修改一下措辞,这可能会更好理解:

var buttons = {
  foo: 'bar',
  fiz: 'buz'
};

for ( var property in buttons ) {
  console.log( property ); // Outputs: foo, fiz or fiz, foo
}

请注意,您正在迭代对象的属性,在每个后续循环中使用 property 作为对每个属性的引用。

MSDN 谈到for ( variable in [object | array ] ) 如下:

在循环的每次迭代之前,都会为变量分配对象的下一个属性名称或数组的下一个元素索引。然后,您可以在循环内的任何语句中使用它来引用对象的属性或数组的元素。

还要注意,对象的属性顺序不是恒定的,并且可以更改,这与数组的索引顺序不同。这可能会派上用场。

【讨论】:

  • 你如何得到 foo?
  • @Demodave 要获取 foo 属性的值,您只需将其从buttons 对象中调用:buttons.foo===buttons['foo']。在 for 循环中,您可以调用 buttons[property]。今天也可以使用Array.entries({foo:"bar",fizz:"buzz"})输出[['foo':'bar'],['fizz','buzz']]
【解决方案2】:

ECMAscript 第 5 版还为您提供了简洁的方法 Object.keys()Object.getOwnPropertyNames()

所以

Object.keys( buttons );  // ['button1', 'button2'];

【讨论】:

  • 这会将所有键作为数组提供。如何获取特定键的键名?
  • 我正在尝试这个:Object.keys({myObj.fieldName})[0];
【解决方案3】:

alert(buttons[i].text); 更改为alert(i);

【讨论】:

    【解决方案4】:

    变量i 是您看起来的键名。

    【讨论】:

      【解决方案5】:

      ES6 更新...虽然过滤器和映射都可能需要自定义。

      Object.entries(theObj) 返回一个对象的 [[key, value],] 数组表示,该对象可以使用 Javascript 的数组方法 .each()、.any()、.forEach()、.filter() 进行处理, .map(), .reduce() 等。

      在迭代对象 Object.keys(theObj)Object.values() 的各个部分时节省了大量工作。

      const buttons = {
          button1: {
              text: 'Close',
              onclick: function(){
      
              }
          },
          button2: {
              text: 'OK',
              onclick: function(){
      
              }
          },
          button3: {
              text: 'Cancel',
              onclick: function(){
      
              }
          }
      }
      
      list = Object.entries(buttons)
          .filter(([key, value]) => `${key}`[value] !== 'undefined' ) //has options
          .map(([key, value], idx) => `{${idx} {${key}: ${value}}}`)
          
      console.log(list)

      【讨论】:

        【解决方案6】:

        这是一个简单的例子,它将帮助您获取对象键名。

        var obj ={parts:{costPart:1000, salesPart: 2000}}; console.log(Object.keys(obj));

        输出将是parts

        【讨论】:

          【解决方案7】:

          假设您可以访问 Prototype,这可能会起作用。几分钟前,我为自己编写了这段代码;我一次只需要一个键,因此对于大型键:值对列表或吐出多个键名来说,这不是时间效率。

          function key(int) {
              var j = -1;
              for(var i in this) {
                  j++;
                  if(j==int) {
                      return i;
                  } else {
                      continue;
                  }
              }
          }
          Object.prototype.key = key;
          

          这被编号以与数组相同的方式工作,以节省头痛。对于您的代码:

          buttons.key(0) // Should result in "button1"
          

          【讨论】:

          • 编辑原型几乎总是一个非常糟糕的主意。
          【解决方案8】:

          要检索键和值,请使用以下内容。

           for (let property in buttons) {
              console.log('key:' + property, 'value:'+ buttons[property]);
           }
          
          

          【讨论】:

            猜你喜欢
            • 2021-06-30
            • 1970-01-01
            • 1970-01-01
            • 2011-03-18
            • 2011-03-05
            • 2014-02-27
            • 1970-01-01
            相关资源
            最近更新 更多