4 votes

Filtre le tableau si l'élément est présent dans un autre tableau basé sur la valeur.

J'ai un tableau d'objets comme ceci :

var objectArray = [{id_5:"100"},
                   {id_1:"300"},
                   {id_2:"500"},
                   {id_4:"700"},
                   {id_3:"200"}];

Et un tableau normal comme celui-ci :

var normalArray = ["id_2","id_5","id_4"];

Je veux soustraire chaque élément de l'objectArray s'il y a un ID correspondant dans le normalArray. Je veux ensuite ordonner le tableau nouvellement créé par la valeur de l'objet (la valeur la plus basse étant la première).

Ainsi, pour l'exemple ci-dessus, le résultat serait :

var newObjectArray = [{id_3:"200"},
                      {id_1:"300"}];

Est-il possible de faire cela sans jQuery ?

J'ai vu des questions similaires à celle-ci : Suppression d'un objet d'un tableau s'il est présent dans un autre tableau en fonction de la valeur. mais je n'ai pas réussi à trouver une réponse qui fonctionne. Est-il possible d'effectuer une comparaison et une suppression de cette manière tout en conservant les paires clé:valeur intactes ? Merci d'avance pour toute aide dans ce domaine !

3voto

Vous devez utiliser filtre qui accepte comme paramètre un callback fonction.

De plus, vous devez utiliser Object.keys() afin d'obtenir la clé de chaque object sur objectArray .

Pour vérifier si un element de objectArray n'apparaît pas dans objectArray vous devez utiliser indexOf() méthode.

Pour atteindre le sorted vous devez utiliser sort() méthode.

var objectArray = [{id_5:"100"},
                   {id_1:"300"},
                   {id_2:"500"},
                   {id_4:"700"},
                   {id_3:"200"}];

var normalArray = ["id_2","id_5","id_4"];
var newArray=objectArray.filter(function(item){
    return normalArray.indexOf(Object.keys(item)[0]) == -1;
}).sort(function(a,b){
    return a[Object.keys(a)[0]] - b[Object.keys(b)[0]];
});
console.log(newArray);

1voto

Nenad Vracar Points 17412

Vous pouvez d'abord utiliser filter() pour enlever l'objet avec la clé de l'autre tableau et ensuite trier pour trier le tableau de résultats par la valeur des objets.

var objectArray = [{id_5:"100"},{id_1:"300"},{id_2:"500"},{id_4:"700"},{id_3:"200"}];
var normalArray = ["id_2","id_5","id_4"];

var newArray = objectArray
  .filter(e => !normalArray.includes(Object.keys(e)[0]))
  .sort((a, b) => a[Object.keys(a)[0]] - b[Object.keys(b)[0]])

console.log(newArray)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X