439 Stimmen

Konvertierung eines JS-Objekts in ein Array mit jQuery

Meine Anwendung erstellt ein JavaScript-Objekt wie das folgende:

myObj= {1:[Array-Data], 2:[Array-Data]}

Aber ich brauche dieses Objekt als Array.

array[1]:[Array-Data]
array[2]:[Array-Data]

Also habe ich versucht, dieses Objekt in ein Array zu konvertieren, indem ich mit $.each durch das Objekt und das Hinzufügen des Elements zu einem Array:

x=[]
$.each(myObj, function(i,n) {
    x.push(n);});

Gibt es eine bessere Möglichkeit, ein Objekt in ein Array zu konvertieren, oder vielleicht eine Funktion?

762voto

Joel Punkte 14973

Wenn Sie nach einem funktionalen Ansatz suchen:

var obj = {1: 11, 2: 22};
var arr = Object.keys(obj).map(function (key) { return obj[key]; });

Ergebnisse in:

[11, 22]

Dasselbe gilt für eine ES6-Pfeilfunktion:

Object.keys(obj).map(key => obj[key])

Mit ES7 werden Sie in der Lage sein, Folgendes zu verwenden Object.values stattdessen ( mehr Informationen ):

var arr = Object.values(obj);

Oder wenn Sie bereits Underscore/Lo-Dash verwenden:

var arr = _.values(obj)

448voto

Dogbert Punkte 200597
var myObj = {
    1: [1, 2, 3],
    2: [4, 5, 6]
};

var array = $.map(myObj, function(value, index) {
    return [value];
});

console.log(array);

Ausgabe:

[[1, 2, 3], [4, 5, 6]]

34voto

Pila Punkte 4626

Einfach tun

Object.values(obj);

Das ist alles!

30voto

Nicola Peluchetti Punkte 74314

Ich denke, Sie können Folgendes verwenden for in sondern prüfen, ob die Eigenschaft nicht vererbt wird

myObj= {1:[Array-Data], 2:[Array-Data]}
var arr =[];
for( var i in myObj ) {
    if (myObj.hasOwnProperty(i)){
       arr.push(myObj[i]);
    }
}

EDIT - wenn Sie möchten, können Sie auch die Indizes Ihres Objekts behalten, aber Sie müssen überprüfen, ob sie numerisch sind (und Sie erhalten undefinierte Werte für fehlende Indizes:

function isNumber(n) {
  return !isNaN(parseFloat(n)) && isFinite(n);
}

myObj= {1:[1,2], 2:[3,4]}
var arr =[];
for( var i in myObj ) {
    if (myObj.hasOwnProperty(i)){
        if (isNumber(i)){
            arr[i] = myObj[i];
        }else{
          arr.push(myObj[i]);
        }
    }
}

25voto

bjornd Punkte 21479

Wenn Sie den maximalen Index in Ihrem Objekt kennen, können Sie Folgendes tun:

var myObj = {
    1: ['c', 'd'],
    2: ['a', 'b']
  },
  myArr;

myObj.length = 3; //max index + 1
myArr = Array.prototype.slice.apply(myObj);
console.log(myArr); //[undefined, ['c', 'd'], ['a', 'b']]

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X