20

オブジェクトの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

4

6 に答える 6

23

オブジェクトを変更します。

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}値は予測可能な場所にあるだけでなく、意味のある名前も持っているため、さらに良いでしょう。技術的には上記と同じですが、今では人は値が何を意味するのかを理解するでしょう。

于 2012-05-23T10:57:05.787 に答える
20
$.each(top_brands, function() {
  var key = Object.keys(this)[0];
  var value = this[key];
  brand_options.append($("<option />").val(key).text(key + " "  + value));
});
于 2012-05-23T10:54:32.093 に答える
15

これがオブジェクトが保存しようとしているすべての場合、最良のリテラルは

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

次に、必要なのはfor...inループだけです。

for (var key in top_brands){
    console.log(key, top_brands[key]);
    }
于 2012-05-23T11:00:16.177 に答える
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));
});
于 2012-05-23T10:57:19.440 に答える
3
for (var i in a) {
   console.log(a[i],i)
}
于 2016-10-27T12:50:12.150 に答える
1
Object.keys(top_brands).forEach(function(key) {
  var value = top_brands[key];
  // use "key" and "value" here...
});

Object.keysところで、とは古いブラウザでは利用できないことに注意してくださいforEach。ただし、ポリフィルを使用する必要があります。

于 2012-05-23T11:00:43.487 に答える