web-dev-qa-db-fra.com

Filtrer un tableau pas dans un autre tableau

Besoin de filtrer un tableau basé sur un autre tableau. Y a-t-il une fonction util dans KO? sinon j'ai besoin d'aller avec javascript

Premier :

var obj1 = [{
    "visible": "true",
    "id": 1
}, {
    "visible": "true",
    "id": 2
}, {
    "visible": "true",
    "id": 3
}, {
    "Name": "Test3",
    "id": 4
}];

Seconde :

var obj2 = [ 2,3]

Maintenant, je dois filtrer obj1 en fonction d'obj2 et renvoyer les éléments d'obj1 qui ne sont pas dans obj2 en omettant 2,3 dans les données ci-dessus (comparaison sur l'objet 1 Id )

sortie:

[{
    "visible": "true",
    "id": 1
}, {
    "Name": "Test3",
    "id": 4
}];
10
Peru

Vous pouvez simplement parcourir obj1 en utilisant filter et utiliser indexOf sur obj2 pour voir s'il existe. indexOf renvoie -1 si la valeur ne figure pas dans le tableau et filter inclut l'élément lorsque le rappel renvoie true.

var arr = obj1.filter(function(item){
  return obj2.indexOf(item.id) === -1;
});
21
Joseph

Pour créer votre tableau en sortie, créez une fonction qui effectuera une itération dans obj1 et remplira un nouveau tableau en fonction de l'existence ou non de l'id de chaque obj de l'itération dans obj2. 

var obj1 = [{
    "visible": "true",
    "id": 1
}, {
    "visible": "true",
    "id": 2
}, {
    "visible": "true",
    "id": 3
}, {
    "Name": "Test3",
    "id": 4
}];

var obj2 = [2,3]

var select = function(arr) {
  var newArr = [];
  obj1.forEach(function(obj) {
    if obj2.indexOf(obj.id) !== -1 {
      newArr.Push(obj)
    };
  };
  return newArr;
};
0
Marwan Sulaiman