2017-10-20 25 views
-1

J'ai un tableau avec des objets. J'ai essayé indexOf mais cela ne fonctionne pas.IndexOf tableau avec objets

let tags = []; 
 

 
let tag = { 
 
    text: "hello", 
 
    element: document.createElement('span') 
 
}; 
 
tags.push(tag); 
 

 
console.log(tags.indexOf("hello"));

Je cherchais quelque chose comme ça, les étiquettes ont des valeurs que je ne veux pas ajouter tout le code.

Existe-t-il une solution pour faire cela, ne comparer que le texte du tableau avec une chaîne, en quelques lignes?

+2

Ce n'est pas un tableau. – Pointy

+2

C'est un objet. – void

+0

J'ai édité, j'ai raté le tableau désolé – enerv

Répondre

1

Vous pouvez utiliser array#filter pour filtrer les étiquettes qui ont votre texte donné.

let tags = [{ 
 
     text: 'hello', 
 
     element: document.createElement('span') 
 
}, { 
 
     text: 'there', 
 
     element: document.createElement('div') 
 
}, { 
 
     text: 'world', 
 
     element: document.createElement('span') 
 
}, { 
 
     text: 'hello', 
 
     element: document.createElement('span') 
 
}]; 
 

 
let result = tags.filter(tag => tag.text === 'hello'); 
 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

0

La réponse acceptée retourne un tableau contenant toutes les balises qui passent la fonction de filtre. Mais la question originale semble être de demander un moyen de trouver l'index d'un tag particulier. Vous pouvez utiliser Array.prototype.findIndex, qui accepte une fonction à tester avec:

tags.findIndex(tag => tag.text === 'hello') 
+0

La vraie question était, je voulais une fonction pour tester si la balise existe déjà dans le tableau des objets. Ma question était mal formulée. Mais ouais merci aussi pour ta réponse! – enerv