web-dev-qa-db-fra.com

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

J'ai un objet comme celui-ci qui revient sous forme de réponse JSON du serveur:

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

Je veux le convertir en un tableau JavaScript comme ceci:

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

Y a-t-il une meilleure façon de faire cela? Partout où je lis, les gens utilisent une logique complexe en utilisant des boucles. Alors, existe-t-il d'autres méthodes pour le faire?

174
Nikhil Agrawal

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

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

VIOLON

et presque aussi facile sans jQuery également, convertir les clés en un tableau puis reconstituer les valeurs avec Array.map

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

VIOLON

Cela suppose qu’il a déjà été analysé comme un objet javascript et qu’il ne s’agit pas d’un format de chaîne, mais dans ce cas, une exécution de _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);
_
326
adeneo
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!

107
benhowdle89

Vous le faites 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);

DÉMO

24
Satpal

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 , vous écrivez votre propre boucle [qui ne serait pas aussi complexe!], ou vous vous fiez à la méthode nderscore.js_.toArray():

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

Rien de difficile ici. Boucle sur vos éléments d'objet et les affecter 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
EoiFirst
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];
    }
}

DÉMO

8
Tareq Salah

Essaye ça:

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

Pas sûr de ce que je 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));
  }
 })
2
Vatsal

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

Sortie:

["1", "2", "3", "4"]
2
mvallebr
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
ASM

Voici un exemple de la façon dont vous pourriez obtenir un tableau d'objets et puis triez 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];
      }
    );
  }
1
htmlfarmer

En supposant que vous ayez une valeur comme celle-ci

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

Ensuite, vous pouvez transformer cela 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-diminsionnels.

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

1
skidadon

Vous pouvez convertir json Object en Array et String 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++;
}
1
Manav Akela

C'est la meilleure solution. Je le pense.

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

Vous pouvez utiliser Object.assign() avec un littéral de tableau vide [] en tant que target:

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

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

console.log(output)

Si vous cochez la case polyfill , Object.assign(target, ...sources) ne fait que copier toutes les propriétés propres énumérables des objets source vers un objet cible. Si le target est un tableau, il ajoutera les clés numériques au littéral du tableau et renverra cet objet target.

0
adiga
      var data = [];

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