J'ai un tableau de type Person qui contient des données. Exemple:
for (let i = 0; i < people.length; i++) {
for (let j = 0; j < names.length; j++) {
if (names[j] === people[i].name) {
people.splice(i);
}
}
}
J'ai un autre type de tableau de chaîne [] qui contient les données suivantes:
names = ["John", "Zina"] ;
J'essaye de supprimer les noms qui sont sur le deuxième tableau du premier tableau comme ceci:
XXX
Pourquoi ça ne marche pas?
4 Réponses :
La méthode splice modifie le tableau inplace . Je vous suggère d'utiliser la méthode filter .
const people = [{name: "John", age: "18"},{name: "Mike", content: "20"},{name: "Brand", content: "18"},{name: "Alice", content: "50"},{name: "Zina", content: "10"}], names=["John", "Zina"];
console.log(people.filter(({name}) => !names.includes(name)));
Cela ne fonctionne pas tant que les noms sont un type de tableau de chaînes
@KathrineHanson, puis utilisez indexOf à la place inclut
Si vous souhaitez conserver la référence d'objet de personnes , vous pouvez itérer personnes à partir de la fin, car Array # splice avec les éléments à supprimer modifie les index des éléments suivants.
.as-console-wrapper { max-height: 100% !important; top: 0; }
var people = [{ name: "Mike", content: "20" }, { label: "Brand", content: "18" }, { label: "Alice", content: "50" }, { label: "Zina", content: "10" }],
names = ["John", "Zina"],
i = people.length;
while (i--) {
if (names.includes(people[i].name) || names.includes(people[i].label)) {
people.splice(i, 1);
}
}
console.log(people);
la propriété inclut n'existe pas sur la chaîne de type []
Veuillez vous référer au code ci-dessous.
const people = [{name: "John", age: "18"},{name: "Mike", content: "20"},{label: "Brand", content: "18"},{label: "Alice", content: "50"},{label: "Zina", content: "10"}];
const names = ["Mike","Shiv"];
for (let i = 0; i < people.length; i++) {
debugger
for (let j = 0; j < names.length; j++) {
if (names[j] === people[i].name) {
people.splice(i,1);
}
}
}
console.log(people)
Splice est en train de modifier le tableau d'origine. c'est-à-dire que à chaque itération si la condition retourne true, le tableau de personnes à cet index est remplacé par undefined et obtient donc une erreur.
vous pouvez utiliser la méthode slice pour obtenir les données que vous souhaitez supprimer. p >
for (let i = 0; i < people.length; i++) {
for (let j = 0; j < names.length; j++) {
if (names[j] === people[i].name) {
console.log("matched",names[j],people[i].name, people.slice(i,i+1),);
}
}
}
ou vous pouvez simplement filtrer les données en utilisant la méthode Filter.
Pourquoi ce changement soudain dans les propriétés? Certains ont
nomtandis que d'autres ontétiquette..people.filter (({name}) =>! names.includes (name))Il vous manque le deuxième paramètre de
splice. Il supprimera tous les éléments à partir dei. Même si vous le changez enpeople.splice (i, 1), cela interrompra la boucle car: Boucle dans un tableau et en supprimant des éléments, sans interrompre la boucle for . Vous devez faire une boucle dans le sens inverse pour que cela fonctionne