How to perform .filter between arrays / objects AngularJS Javascript

1

I have the following two objects in AngularJS:

$scope.listaDoCarrinho = [0: {
        id: "55",
        setor: "alimento",
        foto: "Produtos/Produto (55).jpg",
        descr: "Espaguete Renata",
        de: 15,
        …
    }
    1: {
        id: "1000",
        setor: "biscoitos",
        foto: "Produtos/Produto (1000).jpg",
        descr: "Biscoito Pit-Stop",
        de: 3,
        …
    }
    2: {
        id: "3",
        setor: "higiene",
        foto: "Produtos/Produto (3).jpg",
        descr: "Bronzeador 200ml",
        de: 15,
        …
    }
];

$scope.listademercadoria1 = [0: {
        id: "55",
        setor: "alimento",
        foto: "Produtos/Produto (55).jpg",
        descr: "Espaguete Renata",
        de: 15,
        …
    }
    1: {
        id: "1000",
        setor: "biscoitos",
        foto: "Produtos/Produto (1000).jpg",
        descr: "Biscoito Pit-Stop",
        de: 3,
        …
    }
    2: {
        id: "197",
        setor: "sobremesa",
        foto: "Produtos/Produto (197).jpg",
        descr: "Nutella",
        de: 10,
        …
    }
    4: {
        id: "1",
        setor: "higiene",
        foto: "Produtos/Produto (1).jpg",
        descr: "Bronzeador",
        de: 200,
        …
    }
];

I need a .filter command that returns me with $scope.listademercadoria1 - $scope.listaDoCarrinho (Variable list1, minus the variable, List_Down), filtered by id .

After much research, I came to these conclusions, but infuncional:

Attempt 1:

$scope.listaMercadoriaNova = $scope.listademercadoria1.filter(

    $scope.listademercadoria1.id = $scope.listaDoCarrinho.id);

Attempt 2:

$scope.listaMercadoriaNova = $scope.listademercadoria1.filter(
    function() {
        return $scope.listademercadoria1.id != $scope.listaDoCarrinho.id;
    });

$scope.listademercadoria1 = $scope.listaMercadoriaNova;

I think it's well explained, anything I can improve on the explanation, every comment is welcome.

    
asked by anonymous 11.10.2017 / 21:44

1 answer

2

What you need is, for example:

const filtrados = $scope.listademercadoria1.filter(
    obj => $scope.listaDoCarrinho.find(item => obj.id == item.id)
);

So you look for every listademercadoria1 if this ID exists in listaDoCarrinho . If it does not exist, remove it from the .filter() return.

Example:

// só para o exemplo funcionar
$scope = {};
// só para o exemplo funcionar

$scope.listaDoCarrinho = [{
  id: "55",
  setor: "alimento",
  foto: "Produtos/Produto (55).jpg",
  descr: "Espaguete Renata",
  de: 15
}, {
  id: "1000",
  setor: "biscoitos",
  foto: "Produtos/Produto (1000).jpg",
  descr: "Biscoito Pit-Stop",
  de: 3,
}, {
  id: "3",
  setor: "higiene",
  foto: "Produtos/Produto (3).jpg",
  descr: "Bronzeador 200ml",
  de: 15,
}];

$scope.listademercadoria1 = [{
  id: "55",
  setor: "alimento",
  foto: "Produtos/Produto (55).jpg",
  descr: "Espaguete Renata",
  de: 15,
}, {
  id: "1000",
  setor: "biscoitos",
  foto: "Produtos/Produto (1000).jpg",
  descr: "Biscoito Pit-Stop",
  de: 3,
}, {
  id: "197",
  setor: "sobremesa",
  foto: "Produtos/Produto (197).jpg",
  descr: "Nutella",
  de: 10,
}, {
  id: "1",
  setor: "higiene",
  foto: "Produtos/Produto (1).jpg",
  descr: "Bronzeador",
  de: 200,
}];

const filtrados = $scope.listademercadoria1.filter(obj => $scope.listaDoCarrinho.find(item => obj.id == item.id));

console.log(filtrados);
    
11.10.2017 / 21:49