2011-01-28 18 views
58

RSSフィードを読み込み、タイトルとリンクの両方をのJqueryにプッシュします。私がやったことJqueryでキーと値の両方を配列にプッシュする方法

var arr = []; 

      $.getJSON("displayjson.php",function(data){ 
       $.each(data.news, function(i,news){ 
        var title = news.title; 
        var link = news.link; 
        arr.push({title : link}); 
       });      
      }); 

であると私は再び

$('#show').click(function(){ 
       $.each(arr, function(index, value){ 
        alert(index +' : '+value); 
       }); 
      }); 

を使用してその配列を読んでいます。しかし、それはこのような

1:[Object Object] 
2:[Object Object] 
3:[Object Object] 

として私出力を与えます...

iは、JavaScript配列にはキーがありません(値としてキーとしてタイトルとリンク)ペアとして両方タイルリンク

答えて

124

を取得できますか。その目的のためにオブジェクトを使用してください。

var obj = {}; 

$.getJSON("displayjson.php",function (data) { 
    $.each(data.news, function (i, news) { 
     obj[news.title] = news.link; 
    });      
}); 

// later: 
$.each(obj, function (index, value) { 
    alert(index + ' : ' + value); 
}); 

JavaScriptでは、オブジェクトは結合配列の役割を果たします。反復処理を行うと、オブジェクトには定義済みのソート順がありません(下記参照)。

あなたの場合、元のオブジェクト(data.news)からデータを転送する理由はわかりません。なぜへの参照を渡すのではないのですか?のオブジェクトはどうですか?


あなたは予測可能な繰り返しキー/値の挙動を達成するためのオブジェクトと配列を組み合わせることができます。

var arr = []; 

$.getJSON("displayjson.php",function (data) { 
    $.each(data.news, function (i, news) { 
     arr.push({ 
      title: news.title, 
      link: news.link 
     }); 
    });      
}); 

// later: 
$.each(arr, function (index, value) { 
    alert(value.title + ' : ' + value.link); 
}); 
8
arr[title] = link; 

あなたは配列にを押しじゃない、あなたが設定していますキーtitleを持つ要素は値linkになります。したがって、あなたの配列はオブジェクトでなければなりません。

20

このコード

var title = news.title; 
var link = news.link; 
arr.push({title : link}); 

は、あなたはそれがないと思う何をしていません。プッシュされるのは、 "title"という名前のメンバーが1つあり、linkという値を持つ新しいオブジェクトです。実際のtitle値は使用されません。あなたは

arr.push({title:title, link:link}); 

またはJavaScriptを使用して、Pythonのタプルに近いものではなく、

なりショートカット

arr.push({title, link}); // Note: comma "," and not colon ":" 

を使用することができ進み、最近で何かをしなければならない2つのフィールドを持つオブジェクトを保存するには

arr.push([title, link]); 

arrアレイにオブジェクトまたはアレイを配置したら、のいずれかの値を取得できます10およびvalue.link、またはプッシュアレイバージョンの場合はvalue[0],value[1]となります。

2

あなたはこのことを意味するかもしれない:

var unEnumeratedArray = []; 
var wtfObject = { 
       key : 'val', 
       0  : (undefined = 'Look, I\'m defined'), 
       'new' : 'keyword', 
       '{!}' : 'use bracket syntax', 
       '  ': '8 spaces' 
       }; 

for(var key in wtfObject){ 
    unEnumeratedArray[key] = wtfObject[key]; 
} 
console.log('HAS KEYS PER VALUE NOW:', unEnumeratedArray, unEnumeratedArray[0], 
      unEnumeratedArray.key, unEnumeratedArray['new'], 
      unEnumeratedArray['{!}'], unEnumeratedArray['  ']); 

はあなたのようなオブジェクトの列挙を設定することができます。({})[0] = 'txt';とあなたのような配列のキーを設定することができます。([])['myKey'] = 'myVal';

希望この役立ちます:)

11

オブジェクトを定義して配列をプッシュする必要があると思います

var obj = {}; 
obj[name] = val; 
ary.push(obj); 
関連する問題