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

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

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

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

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

改变你的对象。

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

根据经验:

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

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

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

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

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

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

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

然后你需要的只是一个for...in循环。

 for (var key in top_brands){ console.log(key, top_brands[key]); } 
 $.each(top_brands, function(index, el) { for (var key in el) { if (el.hasOwnProperty(key)) { brand_options.append($("").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($("").val(key).text(key+ " " + el[key])); } } 

或者使用每个jquery:

 $.each(top_brands, function(key, value) { brand_options.append($("").val(key).text(key + " " + value)); }); 
 Object.keys(top_brands).forEach(function(key) { var value = top_brands[key]; // use "key" and "value" here... }); 

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

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