Mon application crée un objet JavaScript, comme suit:
myObj= {1:[Array-Data], 2:[Array-Data]}
Mais j'ai besoin de cet objet en tant que tableau.
array[1]:[Array-Data]
array[2]:[Array-Data]
J'ai donc essayé de convertir cet objet en tableau en itérant avec $.each
via l'objet et en ajoutant l'élément à un tableau:
x=[]
$.each(myObj, function(i,n) {
x.push(n);});
Existe-t-il une meilleure façon de convertir un objet en tableau ou peut-être en fonction?
javascript
jquery
arrays
object
Le Bndr
la source
la source
myObj= {1:[Array-Data]
enmyObj= {0:[Array-Data]
ne faisait pas partie de votre modification (si je me souviens bien)Réponses:
Production:
la source
$.map
? Chaque recherche que j'essaie de faire sur cela révèle juste beaucoup de liens vers jQuery ou la méthode de carte des tableaux.value.key = index; return [value];
place dereturn [value];
Si vous recherchez une approche fonctionnelle:
Résulte en:
La même chose avec une fonction de flèche ES6:
Avec ES7, vous pourrez utiliser à la
Object.values
place ( plus d'informations ):Ou si vous utilisez déjà Underscore / Lo-Dash:
la source
Je pense que vous pouvez utiliser
for in
mais vérifier si la propriété n'est pas inerithedEDIT - si vous le souhaitez, vous pouvez également conserver les index de votre objet, mais vous devez vérifier s'ils sont numériques (et vous obtenez des valeurs indéfinies pour les index manquants:
la source
$.map
s'aplatiraArray-Data
.[{1:[Array-Data], 2:[Array-Data]}]
et$.map()
n'a pas non plus l'air réussi. Il semble que toutes les données de sous-tableau sont fusionnées en un seul tableau.array.length
devrait retourner 2 (car 2 éléments existent), mais il retourne 67 qui est le nombre de tous les éléments dans tous ["Array-Data"].arr[+i] = myObj[i];
parce que (i)for(...in...)
n'est pas garanti de retourner des propriétés dans n'importe quel ordre (ii) dans l'exemple de OP, les propriétés commencent à 1, pas à 0.Faites simplement
C'est tout!
la source
Si vous connaissez l'index maximum dans votre objet, vous pouvez effectuer les opérations suivantes:
la source
myObj.length = Object.keys(myObj).length
Puisque ES5 Object.keys () renvoie un tableau contenant les propriétés définies directement sur un objet (à l'exclusion des propriétés définies dans la chaîne de prototype):
ES6 va encore plus loin avec les fonctions fléchées:
la source
De nos jours, il existe un moyen simple de le faire: Object.values () .
Production:
Cela ne nécessite pas jQuery, il a été défini dans ECMAScript 2017.
Il est pris en charge par tous les navigateurs modernes (oubliez IE).
la source
var state = { ingredient: { salad: 1, bacon: 1, } }
, puisvar HariOm = Object.values(state);
suivi parconsole.log(typeof HariOM)
elle affiche le type comme un objet. Ne devrait-il pas l'afficher sous forme de tableau?Array.isArray(HariOM)
La meilleure méthode serait d'utiliser une fonction javascript uniquement:
la source
var myObj = {1:[1,2,3],2:[4,5,6]};
la source
var bbb = {'1': 'a', '3': 'b'}; var x = []; for (var i in bbb) { x[parseInt(i)] = bbb[i];} console.log(x);
ECMASCRIPT 5:
ECMASCRIPT 2015 ou ES6:
la source
Que diriez-vous
jQuery.makeArray(obj)
Voici comment je l'ai fait dans mon application.
la source
La résolution est très simple
la source
La manière ES8 simplifiée :
La documentation officielle
la source
Fiddle Demo
Extension à la réponse de bjornd .
Référence
Array.prototype.slice ()
Function.prototype.apply ()
Object.prototype.hasOwnProperty ()
Object.keys ()
la source
Si vous souhaitez conserver le nom des propriétés de l'objet en tant que valeurs. Exemple:
Utilisez
Object.keys()
,Array.map()
etObject.assign()
:Résultat:
Explication:
Object.keys()
énumère toutes les propriétés de la source;.map()
applique la=>
fonction à chaque propriété et renvoie un tableau;Object.assign()
fusionne le nom et la valeur de chaque propriété.la source
J'ai fait une fonction personnalisée:
la source
Après quelques tests, voici un convertisseur général d'objet en fonction de tableau:
Vous avez l'objet:
La fonction:
Utilisation de la fonction:
Vous obtenez:
Ainsi, vous pouvez atteindre toutes les clés et valeurs comme:
Résultat dans la console:
Éditer:
Ou sous forme de prototype:
Et puis utilisez comme:
la source
Vous pouvez créer une fonction simple pour effectuer la conversion de
object
versarray
, quelque chose comme ça peut faire le travail pour vous en utilisant du javascript pur:ou celui-ci:
et appelez et utilisez la fonction comme ci-dessous:
Également à l'avenir, nous aurons quelque chose appelé
Object.values(obj)
, similaire àObject.keys(obj)
qui renverra toutes les propriétés pour vous sous forme de tableau, mais pas encore pris en charge dans de nombreux navigateurs ...la source