Conversione di oggetti JavaScript con chiavi numeriche in array


175

Ho un oggetto come questo che ritorna come risposta JSON dal server:

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

Voglio convertirlo in un array JavaScript come questo:

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

C'è un modo migliore per farlo? Ovunque stia leggendo, le persone usano una logica complessa usando i loop. Quindi ci sono metodi alternativi per farlo?



8
Un semplice ciclo non è una logica complessa , tra l'altro
:)

Risposte:


328

In realtà è molto semplice con jQuery $.map

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

VIOLINO

e quasi altrettanto semplice senza jQuery, convertendo le chiavi in ​​un array e quindi mappando i valori con Array.map

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

VIOLINO

Ciò presuppone che sia già analizzato come oggetto javascript e che in realtà non sia JSON, che è un formato stringa, in tal caso JSON.parsesarebbe necessario anche un passaggio.

In ES2015 c'è Object.valuesil salvataggio, che lo rende un gioco da ragazzi

var arr = Object.values(obj);

1
@adeneo Signore, può per favore fornire qualche spiegazione sui metodi htis.
Nikhil Agrawal,

1
@adeneo aka Mr. burns ... Grazie per questa rapida soluzione.
Dzeimsas Zvirblis,

1
@NikhilAgrawal Il trucco qui è usare Object.keys (), che restituisce le chiavi dell'oggetto (= le sue proprietà enumerabili) come un array . Quindi possiamo usare array.map per sostituire ogni chiave con il valore corrispondente in un nuovo array.
antoine,

1
Questa è una risposta, ma non molto amichevole.
Sheriffderek,

1
La domanda non era esplicita, ma avevo ipotizzato che le chiavi dell'oggetto fossero indici dell'array per loro natura (0,1,2,3). Basta sottolineare che le persone dovrebbero sapere che questo metodo non garantisce alcun ordine nell'array; se le chiavi sono indici, è necessario ordinarli esplicitamente in modo che l'array sia creato nell'ordine corretto.
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]);
}

Spero che questo sia quello che stai cercando!


Grazie. ne avevo davvero bisogno. qualcuno ha usato un oggetto come un array in una tonnellata di codice, il che andava bene finché non
avessi

Grazie! Risposta perfetta
Vincent,

molto vicino a ciò di cui avevo bisogno grazie: for (var x in data) {arr [x] = data [x]; }
Andrew

24

Lo fai semplicemente come

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

Non c'è niente come un "oggetto JSON" - JSON è una notazione di serializzazione.

Se vuoi trasformare il tuo oggetto javascript in un array javascript , o scrivi il tuo ciclo [che non sarebbe così complesso!] O fai affidamento sul metodo underscore.js _.toArray() :

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

1
Grazie - funziona come il fascino. Ma come fare lo stesso per gli oggetti interni (oggetti all'interno degli oggetti)? Gli oggetti interni dovrebbero anche diventare membri piatti dell'array a livello di radice (in modo che possano essere passati, per esempio, a datatables.net ecc.)
Gopalakrishna Palem,

+1: "Non c'è niente come un" oggetto JSON "- JSON è una notazione di serializzazione." - Non riesco a credere quante volte ho dovuto ascoltarlo prima di capirlo appieno.
Radbyx,

9

Niente di difficile qui. Passa sopra gli elementi dell'oggetto e assegnali alla matrice

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

Prova questo:

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

La tua soluzione sarà la più lenta tra tutte quelle presentate qui ... Bad for business code;)
HellBaby

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

var vals = Object.values(obj);

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

Un'altra alternativa alla domanda

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

2

Usando javascript non elaborato, supponiamo di avere:

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

È possibile ottenere i valori con:

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

Produzione:

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

2

Non sono sicuro di cosa mi manchi qui, ma semplicemente provando il codice qui sotto funziona. Mi manca qualcosa qui?

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

Supponendo che tu abbia un valore come il seguente

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

Quindi puoi trasformarlo in un array javascript usando quanto segue

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

Questo funziona anche per convertire json in array javascript multidimensionali.

Nessuno degli altri metodi in questa pagina sembrava funzionare completamente per me quando lavoravo con stringhe con codifica php json tranne il metodo che sto citando qui.


1

Ecco un esempio di come è possibile ottenere una matrice di oggetti e quindi ordinare la matrice.

  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

Questa è la soluzione migliore. Credo di si.

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
Grazie per questo frammento di codice, che potrebbe fornire un aiuto limitato e immediato. Una spiegazione adeguata migliorerebbe notevolmente il suo valore a lungo termine mostrando perché questa è una buona soluzione al problema e la renderebbe più utile ai futuri lettori con altre domande simili. Si prega di modificare la risposta di aggiungere qualche spiegazione, tra le ipotesi che hai fatto.
Mogsdad,

0

Puoi convertire json Object in Array & String usando 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 domanda riguarda javascript e non PHP.
Charles Taylor,

-1

È possibile utilizzare Object.assign()con un array vuoto letterale []come target:

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

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

console.log(output)

Se si controlla il polyfill , Object.assign(target, ...sources)copia tutte le proprietà proprie enumerabili dagli sourceoggetti a un oggetto di destinazione. Se targetè un array, aggiungerà le chiavi numeriche al valore letterale dell'array e restituirà l' targetoggetto array.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.