J'essaie de vérifier si l'objet tableau A comprend des objets de B .
for(let entry of this.b){
if(this.a.includes(entry)){
console.log('includes');
}
}
Donc B a deux objets qui sont dans le tableau A . Comment vérifier cela?
J'essaie d'y parvenir avec includes :
let A = [
{ name: "Max" },
{ name: "Jhon" },
{ name: "Naton" },
]
let B = [
{ name: "Max" },
{ name: "Naton" },
]
Mais j'obtiens false sur inclut.
3 Réponses :
Vous devez utiliser une autre boucle, puis vérifier le nom de la propriété:
var a = [
{name: "Max"},
{name: "Jhon"},
{name: "Naton"},
];
var b = [
{name: "Max"},
{name: "Naton"},
];
var aTemp = a.map(i => JSON.stringify(i));
var bTemp = b.map(i => JSON.stringify(i));
for(let entry of bTemp){
if(aTemp.includes(entry)){
console.log('includes', entry);
}
}
OU: Vous pouvez utiliser la version chaîne de l'objet pour vérifier avec includes():
var a = [
{name: "Max"},
{name: "Jhon"},
{name: "Naton"},
];
var b = [
{name: "Max"},
{name: "Naton"},
];
for(let entry of b){
for(let entry2 of a){
if(entry2.name == entry.name){
console.log('includes', entry.name);
}
}
}
Lorsque vous utilisez Array # includes () méthode il retournera toujours false car il compare des objets qui ne le sont pas égal car ils ne font pas référence au même objet .
Vous devez comparer les propriétés des objets et non des objets entiers, vous pouvez le faire en utilisant Array # some () code> méthode comme ceci:
A = [{
name: "Max"
},
{
name: "Jhon"
},
{
name: "Naton"
},
]
B = [{
name: "Max"
},
{
name: "Naton"
},
]
//Filter objects that exists in both arrays
let result = A.filter(el=> B.some(x => x.name === el.name));
console.log(result);Démo:
for (let entry of this.b) {
if (this.b.some(x => x.name === entry.name)) {
console.log('includes');
}
}
La méthode Array.includes () compare les entrées du tableau avec la valeur donnée. Étant donné que vos entrées de tableau sont des objets, il ne correspondra pas. Vous devez faire une boucle sur le tableau vous-même et faire la comparaison.
Array.some () boucle sur un tableau et renvoie true si vous en retourne true au moins un. Cette méthode est utile lorsque vous souhaitez vérifier quelque chose. Dans notre exemple, nous voulons vérifier si le tableau a contient l'entrée b.
const a = [{
name: 'Max',
},
{
name: 'Jhon',
},
{
name: 'Naton',
},
];
const b = [{
name: 'Max',
},
{
name: 'Naton',
},
{
name: 'Daddy',
},
];
// Loop on every entry of the b array
b.forEach((x) => {
// x here represent one entry
// first it will worth { name: 'Max' }, then { name: 'Naton' } ...
// for each value we are going to look at a if we can find a match
const isThereAMatch = a.some((y) => {
// y here is worth one entry of the a array
if (y.name === x.name) return true;
return false;
});
if (isThereAMatch === true) {
console.log(`We have found ${x.name} in a`);
} else {
console.log(`We have not found ${x.name} in a`);
}
});
Si je le décompose:
const a = [{
name: 'Max',
},
{
name: 'Jhon',
},
{
name: 'Naton',
},
];
const b = [{
name: 'Max',
},
{
name: 'Naton',
},
{
name: 'Daddy',
},
];
console.log(b.map(x => a.some(y => y.name === x.name)));
c'est vrai, vous avez tous des objets différents avec les mêmes valeurs de propriété.
Quel est votre résultat attendu?
Je veux que je puisse vérifier si le tableau A contient les objets B du tableau. Le résultat serait donc console.log ('includes') pour chaque objet similaire dans les deux tableaux.
vous devez vérifier les valeurs de la propriété
Comment vérifier si toutes les valeurs sont identiques?
Voir ici: stackoverflow.com/questions/1068834/…
Je souhaite modifier ces objets similaires dans le tableau d'objets A - ajouter de nouvelles clés.