110 votes

Comment pousser à la fois la clé et la valeur dans un tableau en Jquery ?

Je suis en train de lire Flux RSS et en poussant à la fois le titre et le lien dans un tableau en 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 relis ce tableau en utilisant

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

Mais ça me donne Sortie como

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

comme ça ...

Comment je peux obtenir les deux tuile y enlace comme une paire ( titre comme clé et lien comme valeur )

223voto

Tomalak Points 150423

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 des tableaux associatifs. Sachez que les objets n'ont pas d'"ordre de tri" défini lorsqu'on les itère (voir ci-dessous).

Cependant Dans votre cas, je ne vois pas très bien pourquoi vous transférez les données de l'objet original ( data.news ) du tout. Pourquoi ne pas simplement passer une référence à que objet autour ?


Vous pouvez combiner des objets et des tableaux pour obtenir une itération prévisible. y 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 );
});

60voto

6502 Points 42700

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é "titre" et avec link comme la valeur ... la valeur réelle title n'est pas utilisée. Pour sauvegarder un objet avec deux champs, vous devez faire quelque chose comme

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

ou avec les récentes avancées de Javascript, vous pouvez utiliser le raccourci

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

Si, à la place, vous voulez que la clé de l'objet soit le contenu de la variable title vous pouvez utiliser

arr.push({[title]: link}); // Note that title has been wrapped in brackets

25voto

Jaydeep Patel Points 259

Je pense que vous devez définir un objet et ensuite le pousser dans le tableau.

var obj = {};
obj[name] = val;
ary.push(obj);

23voto

deceze Points 200115
arr[title] = link;

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

4voto

Cody Points 1198

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 énumérable pour un objet comme : ({})[0] = 'txt'; et vous pouvez définir une clé pour un tableau comme : ([])['myKey'] = 'myVal';

J'espère que cela vous aidera :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X