在JavaScript中获取对象的关键和价值?

时间:2012-05-23 10:52:37

标签: javascript jquery

给定JavaScript对象数组,如何获取每个对象的键和值?

下面的代码显示了我想做的事情,但显然不起作用:

var top_brands = [ { 'Adidas' : 100 }, { 'Nike' : 50 }];
var brand_options = $("#top-brands");
$.each(top_brands, function() {
  brand_options.append($("<option />").val(this.key).text(this.key + " "  + this.value));
});

那么,如何为数组中的每个条目获取this.keythis.value

6 个答案:

答案 0 :(得分:19)

$.each(top_brands, function() {
  var key = Object.keys(this)[0];
  var value = this[key];
  brand_options.append($("<option />").val(key).text(key + " "  + value));
});

答案 1 :(得分:17)

更改您的对象。

var top_brands = [ 
  { key: 'Adidas', value: 100 }, 
  { key: 'Nike', value: 50 }
];

var $brand_options = $("#top-brands");

$.each(top_brands, function(brand) {
  $brand_options.append(
    $("<option />").val(brand.key).text(brand.key + " " + brand.value)
  );
});

根据经验:

  • 对象具有数据结构
  • 'Adidas''Nike'10050数据
  • 对象键是结构。使用数据作为对象键在语义上是错误的。避免它。

{Nike: 50}中没有语义。什么是“耐克”?什么是50?

{key: 'Nike', value: 50}稍微好一点,因为现在你可以迭代这些对象的数组,并且值在可预测的位置。这使得编写处理它们的代码变得容易。

更好的是{vendor: 'Nike', itemsSold: 50},因为现在值不仅在可预测的位置,它们也有有意义的名称。从技术上讲,这与上面的内容相同,但现在一个人也会理解这些值应该是什么意思。

答案 2 :(得分:15)

如果这是要存储的所有对象,那么最好的文字就是

var top_brands = {
    'Adidas' : 100,
    'Nike'   : 50
    };

然后您只需要一个for...in循环。

for (var key in top_brands){
    console.log(key, top_brands[key]);
    }

答案 3 :(得分:8)

$.each(top_brands, function(index, el) {
  for (var key in el) {
    if (el.hasOwnProperty(key)) {
         brand_options.append($("<option />").val(key).text(key+ " "  + el[key]));
    }
  }
});

但如果你的数据结构是var top_brands = {'Adidas': 100, 'Nike': 50};,那么事情就会简单得多。

for (var key in top_brands) {
  if (top_brands.hasOwnProperty(key)) {
       brand_options.append($("<option />").val(key).text(key+ " "  + el[key]));
  }
}

或者分别使用jquery:

$.each(top_brands, function(key, value) {
    brand_options.append($("<option />").val(key).text(key + " "  + value));
});

答案 4 :(得分:2)

for (var i in a) {
   console.log(a[i],i)
}

答案 5 :(得分:0)

Object.keys(top_brands).forEach(function(key) {
  var value = top_brands[key];
  // use "key" and "value" here...
});

顺便说一句,请注意Object.keysforEach在古代浏览器中不可用,但无论如何都应该使用一些polyfill。