在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.key
和this.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'
,100
和50
都是数据 。 - 对象键是结构 。 使用数据作为对象键在语义上是错误的。 躲开它。
{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.keys
和forEach
不可用,但无论如何你应该使用一些polyfill。
for (var i in a) { console.log(a[i],i) }