给定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.key
和this.value
?
答案 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'
,100
和50
是数据。 {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.keys
和forEach
在古代浏览器中不可用,但无论如何都应该使用一些polyfill。