web-dev-qa-db-fra.com

Comment insérer la clé et la valeur dans un tableau dans Jquery

Je lis flux RSS et en poussant Title et Link dans un tableau dans Jquery.

Ce que j'ai fait c'est

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});
                });                      
            });

Et je lis encore ce tableau en utilisant

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

Mais ça me donne Sortie comme

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

comme ça ...

Comment je peux obtenir à la fois tuile et lien sous forme de paire (titre comme clé et lien comme valeur)

77
KillerFish

Il n'y a pas de clés dans les tableaux JavaScript. Utilisez des objets à cette fin.

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 );
});

En JavaScript, les objets remplissent le rôle de tableaux associatifs. Sachez que les objets ne disposent pas d'un "ordre de tri" lors de leur itération (voir ci-dessous).

Cependant, Dans votre cas, la raison pour laquelle vous transférez des données de l'objet d'origine (data.news) n'est pas vraiment claire. Pourquoi ne passez-vous pas simplement une référence à cet objet ?


Vous pouvez combiner des objets et des tableaux pour obtenir une itération prévisible et un comportement clé/valeur :

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 );
});
159
Tomalak

Ce code

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

ne fait pas ce que vous pensez qu'il fait. Ce qui est poussé est un nouvel objet avec un seul membre nommé "title" et avec link comme valeur ... la valeur réelle title n'est pas utilisée. Pour enregistrer un objet avec deux champs, vous devez faire quelque chose comme

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

ou avec les dernières avancées en Javascript, vous pouvez utiliser le raccourci

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

La chose la plus proche d'un python Tuple serait plutôt

arr.Push([title, link]);

Une fois que vous avez vos objets ou vos tableaux dans le tableau arr, vous pouvez obtenir les valeurs sous la forme value.title et value.link ou, dans le cas de la version de tableau importée, sous la forme value[0], value[1].

28
6502

Je pense que vous devez définir un objet puis pousser dans le tableau

var obj = {};
obj[name] = val;
ary.Push(obj);
16
Jaydeep Patel
arr[title] = link;

Vous n'êtes pas poussant dans le tableau, vous définissez l'élément avec la clé title sur la valeur link. En tant que tel, votre tableau doit être un objet.

12
deceze

Vous pourriez vouloir dire ceci:

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['        ']);

Vous pouvez définir un objet énumérable pour un objet tel que: ({})[0] = 'txt'; et vous pouvez définir une clé pour un tableau tel que: ([])['myKey'] = 'myVal';.

J'espère que cela t'aides :)

2
Cody