web-dev-qa-db-fra.com

Une liste de tuples en Javascript

Disons que je reçois une chaîne JSON contenant des informations sur les personnes. Maintenant, je passe en revue tous les objets JSON et j'extrais le nom et l'âge ou chaque personne.

Comment les stocker sous forme de tuples dans une liste pour un traitement ultérieur? (Par exemple, par une autre fonction)

26
Boris

En supposant que le JSON entrant est quelque chose comme ceci:

var incomingList = [{
  "name": "Homer Simpson",
  "age": 45,
  "occupation": "Nuclear Plant Technician",
    ...
},{
  "name": "Marge Simpson",
  "age": 44,
  "occupation": "Homemaker",
    ...
},
  ...
]

Vous pouvez extraire le nom et l'âge uniquement dans un tableau d'objets similaire:

var nameAndAgeList = incomingList.map(function(item) {
  return {
    name: item.name,
    age: item.age
  };
});

JavaScript n'a que des objets et des tableaux, pas des tuples. Si vos données sont associatives (chaque enregistrement a des paires clé-valeur avec le nom du champ comme clé), l'approche ci-dessus fonctionnera bien.


Cependant, si vous devez associer les noms et âges dans un seul objet en tant que paires clé-valeur (comme un tableau associatif) avec des noms en tant que clés et des âges en tant que valeurs, les éléments suivants fonctionneront (en supposant que les noms sont uniques):

var namesAndAges = incomingList.reduce(function(result,item) {
  result[item.name] = item.age;
  return result;
},{});
17
Roy Tinker

En s'appuyant sur la réponse de Vikram, comme vous l'avez spécifiquement demandé tuples , ce qui suit vous renvoie un tableau de tableaux - en d'autres termes, une liste de tuples.

var parsed = JSON.parse('[{"name":"john", "place":"usa", "phone":"12345"},{"name":"jim", "place":"canada", "phone":"54321"}]');

var people = [];
for (var i=0; i < parsed.length; i++) {
   var person = [parsed[i].name, parsed[i].place, parsed[i].phone];
   people.Push(person);
}
5
Mike Chamberlain

JS n'a pas d'objet de type "Tuple". (voir: Affectations de variables JavaScript à partir de tuples )

Vous pouvez soit créer votre propre classe Tuple, soit simplement utiliser un tableau de longueur 2 (vous vous retrouvez donc avec un tableau de tableaux de longueur 2)

3
arcyqwerty

Qu'est-ce que vous ne convertissez pas la chaîne JSON elle-même en objet. JSON est nativement pris en charge en javascript après tout ce qu'il est * J * ava * S * cript * O * bject * N * otation.

Supposons que vous ayez une chaîne json -

"[{name:john,place:usa,phone:12345},{name:jim,place:canada,phone:54321}]"

Vous pouvez convertir en objet js en -

var persons = JSON.parse("[{name:john,place:usa,phone:12345},{name:jim,place:canada,phone:54321}]");

Maintenant, vous pouvez y accéder comme ceci - en boucle tous les tuples/enregistrements -

for (var i=0;i<persons.length;i++) {
   var person = persons[i];
   var name = person.name;
   var place = person.place;
   var phone = person.phone;
}
3
Vikram Rao

Si par Tuple vous voulez dire quelque chose comme une paire ordonnée, vous pouvez avoir un objet avec le nom d'attribut comme "nom" de la personne et la valeur comme "âge" de la personne.

Comme ça:

var tupleObj = {};
for (var i in jsonObj) {
    tupleObj[jsonObj[i].name] = jsonObj[i].age;
}
1
tewathia