Conversion d'un objet JavaScript avec des touches numériques en tableau


175

J'ai un objet comme celui-ci qui revient en tant que réponse JSON du serveur:

{"0":"1","1":"2","2":"3","3":"4"}

Je veux le convertir en un tableau JavaScript comme celui-ci:

["1","2","3","4"]

Existe-t-il une meilleure façon de procéder? Partout où je lis, les gens utilisent une logique complexe utilisant des boucles. Alors, existe-t-il des méthodes alternatives pour faire cela?



8
Une simple boucle n'est pas une logique complexe , au fait
:)

Réponses:


328

C'est en fait très simple avec jQuery $.map

var arr = $.map(obj, function(el) { return el });

VIOLON

et presque aussi simple sans jQuery, en convertissant les clés en tableau, puis en mappant les valeurs avec Array.map

var arr = Object.keys(obj).map(function(k) { return obj[k] });

VIOLON

Cela suppose qu'il est déjà analysé comme un objet javascript, et qu'il ne s'agit pas en fait de JSON, qui est un format de chaîne, dans ce cas, un passage JSON.parse serait également nécessaire.

Dans ES2015, il y a Object.valuesà la rescousse, ce qui en fait un jeu d'enfant

var arr = Object.values(obj);

1
@adeneo Sir pouvez-vous s'il vous plaît fournir quelques explications sur les méthodes htis.
Nikhil Agrawal

1
@adeneo aka Mr. burns ... Merci pour cette solution rapide.
Dzeimsas Zvirblis

1
@NikhilAgrawal L'astuce ici est d'utiliser Object.keys (), qui renvoie les clés de l'objet (= ses propres propriétés énumérables) sous forme de tableau . Ensuite, nous pouvons utiliser array.map pour remplacer chaque clé par la valeur correspondante dans un nouveau tableau.
antoine

1
C'est une réponse, mais pas très amicale.
sheriffderek

1
La question n'était pas explicite, mais j'avais supposé que les clés de l'objet sont des index du tableau de par leur nature (0,1,2,3). Soulignant simplement que les gens devraient savoir que cette méthode ne garantit aucun ordre dans le tableau; si les clés sont des index, vous devez les ordonner explicitement afin que le tableau soit construit dans le bon ordre.
leejt489

107
var json = '{"0":"1","1":"2","2":"3","3":"4"}';

var parsed = JSON.parse(json);

var arr = [];

for(var x in parsed){
  arr.push(parsed[x]);
}

J'espère que c'est ce que vous recherchez!


Merci. vraiment besoin de ça. quelqu'un a utilisé un objet comme tableau dans une tonne de code, ce qui était bien jusqu'à ce que
j'aie

Je vous remercie! Réponse parfaite.
Vincent

très proche de ce dont j'avais besoin merci: for (var x in data) {arr [x] = data [x]; }
Andrew

24

Tu le fais simplement comme

var data = {
    "0": "1",
    "1": "2",
    "2": "3",
    "3": "4"
};
var arr = [];
for (var prop in data) {
    arr.push(data[prop]);
}
console.log(arr);

DEMO


20

Il n'y a rien de tel qu'un "objet JSON" - JSON est une notation de sérialisation.

Si vous souhaitez transformer votre objet javascript en un tableau javascript , soit vous écrivez votre propre boucle [qui ne serait pas si complexe!], Soit vous vous fiez à la méthode underscore.js _.toArray() :

var obj = {"0":"1","1":"2","2":"3","3":"4"};
var yourArray = _(obj).toArray();

1
Merci - fonctionne comme du charme. Mais comment faire de même pour les objets internes (objets dans les objets)? Les objets internes doivent également devenir des membres plats du tableau au niveau de la racine (afin qu'ils puissent être passés à, disons, datatables.net, etc.)
Gopalakrishna Palem

+1: "Il n'y a rien de tel qu'un" objet JSON "- JSON est une notation de sérialisation." - Je ne peux pas croire combien de fois j'ai dû entendre cela avant de le comprendre pleinement.
radbyx

9

Rien de difficile ici. Faites une boucle sur vos éléments d'objet et attribuez-les au tableau

var obj = {"0":"1","1":"2","2":"3","3":"4"};
var arr = [];
for (elem in obj) {
   arr.push(obj[elem]);
}

http://jsfiddle.net/Qq2aM/


9

var JsonObj = {
  "0": "1",
  "1": "2",
  "2": "3",
  "3": "4"
};

var array = [];
for (var i in JsonObj) {
  if (JsonObj.hasOwnProperty(i) && !isNaN(+i)) {
    array[+i] = JsonObj[i];
  }
}

console.log(array)

DEMO


4

Essaye ça:

var newArr = [];
$.each(JSONObject.results.bindings, function(i, obj) {
    newArr.push([obj.value]);
});

Votre solution sera la plus lente de toutes celles présentées ici ... Mauvais pour le code métier;)
HellBaby

3
var obj = {"0":"1","1":"2","2":"3","3":"4"};

var vals = Object.values(obj);

console.log(vals); //["1", "2", "3", "4"]

Une autre alternative à la question

var vals = Object.values(JSON.parse(obj)); //where json needs to be parsed

2

En utilisant du javascript brut, supposons que vous ayez:

var j = {0: "1", 1: "2", 2: "3", 3: "4"};

Vous pouvez obtenir les valeurs avec:

Object.keys(j).map(function(_) { return j[_]; })

Production:

["1", "2", "3", "4"]

2

Je ne sais pas ce qui me manque ici, mais simplement essayer le code ci-dessous fait le travail. Est-ce que je manque quelque chose ici?

https://jsfiddle.net/vatsalpande/w3ew5bhq/

$(document).ready(function(){

var json = {
   "code" :"1", 
   "data" : { 
    "0" : {"id":"1","score":"44"},
    "1" : {"id":"1","score":"44"}
    }
  };

  createUpdatedJson();

  function createUpdatedJson(){

    var updatedJson = json;

    updatedJson.data = [updatedJson.data];

    $('#jsondata').html(JSON.stringify(updatedJson));


    console.log(JSON.stringify(updatedJson));
  }
 })

1

En supposant que vous ayez une valeur comme celle-ci

var obj = {"0":"1","1":"2","2":"3","3":"4"};

Ensuite, vous pouvez le transformer en un tableau javascript en utilisant ce qui suit

var arr = [];
json = JSON.stringify(eval('(' + obj + ')')); //convert to json string
arr = $.parseJSON(json); //convert to javascript array

Cela fonctionne également pour convertir json en tableaux javascript multi-dimensionnels.

Aucune des autres méthodes de cette page ne semblait fonctionner complètement pour moi lorsque je travaillais avec des chaînes codées en php json, à l'exception de la méthode que je mentionne ici.


1

Voici un exemple de la façon dont vous pourriez obtenir un tableau d'objets , puis trier le tableau.

  function osort(obj)
  {  // map the object to an array [key, obj[key]]
    return Object.keys(obj).map(function(key) { return [key, obj[key]] }).sort(
      function (keya, keyb)
      { // sort(from largest to smallest)
          return keyb[1] - keya[1];
      }
    );
  }

0

C'est la meilleure solution. Je le pense.

Object.keys(obj).map(function(k){return {key: k, value: obj[k]}})

0
      var data = [];

      data  = {{ jdata|safe }}; //parse through js
      var i = 0 ;
      for (i=0;i<data.length;i++){
         data[i] = data[i].value;
      }

2
Merci pour cet extrait de code, qui pourrait fournir une aide limitée et immédiate. Une explication appropriée améliorerait considérablement sa valeur à long terme en montrant pourquoi c'est une bonne solution au problème, et la rendrait plus utile aux futurs lecteurs avec d'autres questions similaires. Veuillez modifier votre réponse pour ajouter des explications, y compris les hypothèses que vous avez formulées.
Mogsdad

0

Vous pouvez convertir un objet json en tableau et chaîne en utilisant PHP.

$data='{"resultList":[{"id":"1839","displayName":"Analytics","subLine":""},{"id":"1015","displayName":"Automation","subLine":""},{"id":"1084","displayName":"Aviation","subLine":""},{"id":"554","displayName":"Apparel","subLine":""},{"id":"875","displayName":"Aerospace","subLine":""},{"id":"1990","displayName":"Account Reconciliation","subLine":""},{"id":"3657","displayName":"Android","subLine":""},{"id":"1262","displayName":"Apache","subLine":""},{"id":"1440","displayName":"Acting","subLine":""},{"id":"710","displayName":"Aircraft","subLine":""},{"id":"12187","displayName":"AAC","subLine":""}, {"id":"20365","displayName":"AAT","subLine":""}, {"id":"7849","displayName":"AAP","subLine":""}, {"id":"20511","displayName":"AACR2","subLine":""}, {"id":"28585","displayName":"AASHTO","subLine":""}, {"id":"45191","displayName":"AAMS","subLine":""}]}';

$b=json_decode($data);

$i=0;
while($b->{'resultList'}[$i])
{
    print_r($b->{'resultList'}[$i]->{'displayName'});
    echo "<br />";
    $i++;
}

La question concerne javascript et non PHP.
Charles Taylor

-1

Vous pouvez utiliser Object.assign()avec un tableau vide littéral []comme target:

const input = {
  "0": "1",
  "1": "2",
  "2": "3",
  "3": "4"
}

const output = Object.assign([], input)

console.log(output)

Si vous cochez le polyfill , Object.assign(target, ...sources)copie simplement toutes les propriétés propres énumérables des sourceobjets vers un objet cible. Si le targetest un tableau, il ajoutera les clés numériques au littéral du tableau et retournera cet targetobjet tableau.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.