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?
C'est en fait très simple avec jQuery's $.map
_var arr = $.map(obj, function(el) { return el });
_
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] });
_
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);
_
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!
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);
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();
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]);
}
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];
}
}
Essaye ça:
var newArr = [];
$.each(JSONObject.results.bindings, function(i, obj) {
newArr.Push([obj.value]);
});
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));
}
})
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"]
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
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];
}
);
}
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.
$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++;
}
C'est la meilleure solution. Je le pense.
Object.keys(obj).map(function(k){return {key: k, value: obj[k]}})
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
.
var data = [];
data = {{ jdata|safe }}; //parse through js
var i = 0 ;
for (i=0;i<data.length;i++){
data[i] = data[i].value;
}