Maison >interface Web >js tutoriel >Méthode JS pour convertir des objets non-tableaux en tableaux

Méthode JS pour convertir des objets non-tableaux en tableaux

小云云
小云云original
2018-03-28 09:39:111767parcourir

Cet article vous présente principalement certaines méthodes de conversion JS d'objets non-tableaux en tableaux, à savoir Array.prototype.slice.call(obj), Array.from(obj), [...obj] et Object. valeurs (obj) et d'autres méthodes, les amis dans le besoin peuvent s'y référer, j'espère que cela pourra aider tout le monde.

Array.prototype.slice.call(obj)

Cette méthode peut convertir un objet de type tableau en tableau, la soi-disant classe Un objet tableau est un objet contenant des attributs de longueur et d'index

La longueur du tableau renvoyée dépend de la valeur de l'attribut de longueur de l'objet et de la valeur d'un attribut non-index, ou d'une valeur avec un index supérieur à la longueur ne sera pas renvoyé au tableau

Le marteau réel est le suivant

let obj = {
 '0': 3,
 '1': 13,
 '2': 23,
 '3': 33,
 'length': 3,
 'name': 330
}
let arr = Array.prototype.slice.call(obj)
// [3, 13, 23]

Écriture concise [].slice.call(obj)

Array.from(obj)

Cette méthode peut convertir des objets de type tableau et des objets itérables en tableaux

Les objets de type tableau ont été mentionnés ci-dessus. Que sont les objets itérables ?

  • Array, Set, Map et String sont tous des objets itérables (WeakMap/WeakSet ne sont pas des objets itérables)

  • Variable chaîne Devenue un objet itérable , résolvant le problème de codage

  • Ces objets ont des itérateurs par défaut, c'est-à-dire qu'ils ont l'attribut Symbol.iterator

  • Vous pouvez utiliser le for de la boucle

  • Tous les itérateurs créés par les générateurs sont des objets itérables

  • Le retour est un objet itérable mais pas un tableaudocument.getElementsByTagName("p")
    renvoie falseArray.isArray(document.getElementsByTagName('p'))

Créer un objet itérable via un générateur


let obj = {
 '0': 3,
 '1': 13,
 '2': 23,
 '3': 33
}

function *createIterator(obj){
 for(let value in obj){
  yield obj[value]
 }
}

let iterator = createIterator(obj)
let arr = Array.from(iterator)
// [3, 13, 23, 33]
Transformer l'objet lui-même pour en faire un objet itérable

Par défaut, les objets définis par le développeur sont des objets non itérables, mais si vous ajoutez un générateur à l'attribut

, vous pouvez le rendre itérable.Symbol.iterator

.

let obj = {
 '0': 3,
 '1': 13,
 '2': 23,
 '3': 33
}

obj[Symbol.iterator] = function* () {
 for(let value in this){
  yield this[value]
 }
}

let arr = Array.from(obj)
// [3, 13, 23, 33]
Méthode pour déterminer si un objet est un objet itérable


typeof obj[Symbol.iterator] === 'function'
Une petite extension de for of et forEach et for in

for of est utilisé pour boucler des objets itérables, notamment Array, Set, Map, string

et Array, Set et Map ont tous la méthode forEach

De plus, NodeList est pas un tableau, un ensemble ou une carte, mais un objet itérable qui peut être parcouru en utilisant for of

De plus, lorsque vous utilisez for of pour boucler des objets, il peut être terminé plus tôt via break, mais forEach ne peut pas en sortir de la boucle à l'avance.

for in parcourt les propriétés énumérables de l'objet, y compris les propriétés de sa chaîne de prototypes, et l'ordre n'est pas garanti

Pour parcourir les propriétés énumérables de l'objet lui-même , utilisez la méthode

Pour déterminer si l'attribut est le propre attribut de l'objet hasOwnProperty()

, retournez l'attribut énumérable ou non énumérable de l'objet lui-même Object.getOwnPropertyNames(obj)

Quoi qu'il en soit, nous y sommes allés trop loin, alors allons un peu plus loin,

La méthode copie les valeurs de toutes les propriétés énumérables d'un ou plusieurs objets source vers l'objet cible Object.assign()

[…obj]

L'opérateur de propagation peut convertir un objet itérable en tableau

Par exemple,

renvoie [...'obj'] ["o", "b", "j"]

déduplication de chaîne

[...new Set('objobj')]

Object.values(obj)

Par défaut, les objets définis par le développeur sont des objets non itérables, mais une itération de retour est fournie Méthodes conteneur

  • entries()

  • values()

  • keys()

En utilisant ces méthodes, vous pouvez renvoyer des tableaux associés

Contrairement aux objets de type tableau qui nécessitent que l'objet ait une valeur de longueur ,

renvoie une collection de valeurs de propriétés énumérables​​de l'objet lui-même Object.values(obj)


let obj = {
 '0': 3,
 '1': 13,
 '2': 23,
 '3': 33
}
let arr = Object.values(obj) // [3, 13, 23, 33]

La relation entre les chaînes et les tableaux

Dans une large mesure, vous pouvez considérer les chaînes comme dans un tableau de chaînes,

ont toutes des attributs de longueur,

ont toutes

/ concat() / indexOf()/ includes() méthodes slice()

, mais il convient de noter qu'il n'existe aucune méthode sur une chaîne qui puisse modifier son propre contenu en place. Elles renvoient toutes une nouvelle chaîne

chaîne. . Il existe également une méthode

qui crée un nombre spécifié de copies de chaînes. repeat()

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn