Konvertieren von JavaScript-Objekten mit numerischen Schlüsseln in ein Array


175

Ich habe ein Objekt wie dieses, das als JSON-Antwort vom Server zurückkommt:

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

Ich möchte es in ein JavaScript-Array wie folgt konvertieren:

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

Gibt es einen besten Weg, dies zu tun? Wo immer ich lese, verwenden die Leute komplexe Logik unter Verwendung von Schleifen. Gibt es dazu alternative Methoden?



8
Eine bloße Schleife ist übrigens keine komplexe Logik
:)

Antworten:


328

Mit jQuery's ist es eigentlich sehr einfach $.map

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

GEIGE

und fast genauso einfach ohne jQuery, die Schlüssel in ein Array zu konvertieren und dann die Werte mit wieder zuzuordnen Array.map

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

GEIGE

Dies setzt voraus, dass es bereits als Javascript-Objekt analysiert wurde und nicht JSON ist, bei dem es sich um ein Zeichenfolgenformat handelt. In diesem Fall wäre auch ein Durchlauf JSON.parseerforderlich.

In ES2015 gibt Object.valueses zur Rettung, was dies zu einem Kinderspiel macht

var arr = Object.values(obj);

1
@adeneo Sir, können Sie bitte einige Erklärungen zu diesen Methoden geben?
Nikhil Agrawal

1
@adeneo aka Mr. Burns ... Danke für diese schnelle Lösung.
Dzeimsas Zvirblis

1
@NikhilAgrawal Der Trick hier besteht darin, Object.keys () zu verwenden, das die Schlüssel des Objekts (= seine eigenen aufzählbaren Eigenschaften) als Array zurückgibt . Dann können wir array.map verwenden, um jeden Schlüssel durch den entsprechenden Wert in einem neuen Array zu ersetzen.
Antoine

1
Dies ist eine Antwort, aber keine sehr freundliche.
Sheriffderek

1
Die Frage war nicht explizit, aber ich hatte angenommen, dass die Schlüssel des Objekts Indizes des Arrays sind, die von Natur aus (0,1,2,3) sind. Ich möchte nur darauf hinweisen, dass die Leute wissen sollten, dass diese Methode keine Reihenfolge im Array garantiert. Wenn es sich bei den Schlüsseln um Indizes handelt, müssen Sie diese explizit anordnen, damit das Array in der richtigen Reihenfolge erstellt wird.
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]);
}

Hoffe das ist was du suchst!


Vielen Dank. brauchte das wirklich. Jemand benutzte ein Objekt als Array in einer Tonne Code, was in Ordnung war, bis ich darauf aufbauen musste ...
Amanda Fouts

Danke dir! Perfekte Antwort.
Vincent

sehr nah an dem, was ich brauchte danke: für (var x in data) {arr [x] = data [x]; }
Andrew

24

Du machst es einfach so

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

Es gibt nichts Schöneres als ein "JSON-Objekt" - JSON ist eine Serialisierungsnotation.

Wenn Sie Ihr Javascript-Objekt in ein Javascript-Array umwandeln möchten, schreiben Sie entweder eine eigene Schleife [die nicht so komplex wäre!] Oder Sie verlassen sich auf die _.toArray() Methode underscore.js :

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

1
Danke - funktioniert wie Charme. Aber wie kann man das auch für interne Objekte (Objekte innerhalb von Objekten) tun? Interne Objekte sollten auch flache Mitglieder des Arrays auf der Stammebene werden (damit sie beispielsweise an datatables.net usw. übergeben werden können)
Gopalakrishna Palem

+1: "Es gibt nichts Schöneres als ein" JSON-Objekt "- JSON ist eine Serialisierungsnotation." - Ich kann nicht glauben, wie oft ich das hören musste, bevor ich es vollständig verstanden habe.
Radbyx

9

Nichts schweres hier. Durchlaufen Sie Ihre Objektelemente und weisen Sie sie dem Array zu

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

Versuche dies:

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

Ihre Lösung wird die langsamste von allen hier vorgestellten sein ... Schlecht für Geschäftscode;)
HellBaby

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

var vals = Object.values(obj);

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

Eine weitere Alternative zur Frage

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

2

Angenommen, Sie verwenden rohes Javascript:

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

Sie könnten die Werte erhalten mit:

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

Ausgabe:

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

2

Ich bin mir nicht sicher, was mir hier fehlt, aber einfach den folgenden Code auszuprobieren, macht die Arbeit. Vermisse ich hier etwas?

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

Angenommen, Sie haben einen Wert wie den folgenden

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

Anschließend können Sie dies wie folgt in ein Javascript-Array umwandeln

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

Dies funktioniert auch für die Konvertierung von json in mehrdimensionale Javascript-Arrays.

Keine der anderen Methoden auf dieser Seite schien für mich vollständig zu funktionieren, wenn ich mit PHP-JSON-codierten Zeichenfolgen arbeite, mit Ausnahme der Methode, die ich hier erwähne.


1

Hier ist ein Beispiel, wie Sie ein Array von Objekten erhalten und das Array dann sortieren können.

  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

Dies ist die beste Lösung. Ich glaube schon.

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
Vielen Dank für dieses Code-Snippet, das möglicherweise nur begrenzte, sofortige Hilfe bietet. Eine richtige Erklärung würde ihren langfristigen Wert erheblich verbessern, indem sie zeigt, warum dies eine gute Lösung für das Problem ist, und es für zukünftige Leser mit anderen, ähnlichen Fragen nützlicher machen. Bitte bearbeiten Sie Ihre Antwort, um eine Erklärung hinzuzufügen, einschließlich der von Ihnen getroffenen Annahmen.
Mogsdad

0

Sie können json Object mit PHP in Array & String konvertieren.

$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++;
}

Die Frage ist über Javascript nicht PHP.
Charles Taylor

-1

Sie verwenden können Object.assign()mit einem leeren Arrayliteral []als das target:

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

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

console.log(output)

Wenn Sie das Kontroll polyfill , Object.assign(target, ...sources)nur kopiert alle enumerable eigenen Eigenschaften der sourceObjekte zu einem Zielobjekt. Wenn targetes sich um ein Array handelt, werden die numerischen Schlüssel zum Array-Literal hinzugefügt und das targetArray-Objekt zurückgegeben.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.