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?

Nikhil Agrawal
quelle
3
Duplikat: stackoverflow.com/questions/6857468/…
BENARD Patrick
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);
Adeneo
quelle
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!

benhowdle89
quelle
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

Satpal
quelle
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();
moonwave99
quelle
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/

EoiFirst
quelle
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

Tareq Salah
quelle
4

Versuche dies:

var newArr = [];
$.each(JSONObject.results.bindings, function(i, obj) {
    newArr.push([obj.value]);
});
Afghan Dev
quelle
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
ASM
quelle
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"]
mvallebr
quelle
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));
  }
 })
Vatsal
quelle
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.

Skidadon
quelle
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];
      }
    );
  }
Asher
quelle
0

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

Object.keys(obj).map(function(k){return {key: k, value: obj[k]}})
Tutaro
quelle
0
      var data = [];

      data  = {{ jdata|safe }}; //parse through js
      var i = 0 ;
      for (i=0;i<data.length;i++){
         data[i] = data[i].value;
      }
cz Spiel
quelle
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++;
}
Manav Akela
quelle
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.

adiga
quelle