Dans lodash il y a une possibilité de filtrer dans un tableau qui est dans un objet?

J'ai un objet qui contient un tableau. Ça ressemble à ça

{
  "id": "1",
  "name": "Test 1",
  "tag": ["blue","red", "yellow"]
},
{
  "id": "2",
  "name": "Test 2",
  "tag": ["red", "yellow"]
},
{
  "id": "3",
  "name": "Test 3",
  "tag": ["green"]
}

Ce que je veux faire maintenant. Si la balise est rouge, il doit sortir l'objet avec les identifiants: 1 et 2. Tag = vert uniquement l'objet avec l'id: 3. Et ainsi de suite.

J'ai maintenant essayé de résoudre ce problème avec le filtre lodash.

 const filteredColors = _.filter(colors, function(c) {
  return _.includes(['Test 1', 'Test 2'], c.name);
});
// returns Objects with 2 Entrys = Correct

Je peux filtrer les valeurs normales, mais comment trouver la valeur dans le tableau?

0
Ckappo 20 nov. 2018 à 14:05

5 réponses

Meilleure réponse

Je l'ai résolu avec:

 let filter = _.filter(
  colors,
  _.flow(
    _.property('tag'),
    _.partial(_.intersection, ['red', 'green']),
    _.size,
  ),
);
0
Ckappo 20 nov. 2018 à 11:13

Ceci dans lodash est un peu plus long qu'avec ES6 .

const data = [{ "id": "1", "name": "Test 1", "tag": ["blue","red", "yellow"] }, { "id": "2", "name": "Test 2", "tag": ["red", "yellow"] }, { "id": "3", "name": "Test 3", "tag": ["green"] }]

// lodash
const lodash = c => _.filter(data, x => _.includes(x.tag,c))

// ES6
const es6 = c => data.filter(x => x.tag.includes(c))

console.log(lodash('green'))
console.log(es6('green'))
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>

L'idée dans les deux est d'utiliser simplement _.filter / Array.filter puis _.includes / Array.includes

0
Akrion 20 nov. 2018 à 18:18

Convertissez votre tableau en chaîne, puis vous pouvez vérifier que la chaîne contient ou non votre couleur. Comme.

 const items =  [
      {
         "id": "1",
         "name": "Test 1",
         "tag": ["blue","red", "yellow"]
      },
      {
         "id": "2",
         "name": "Test 2",
         "tag": ["red", "yellow"]
      },
      {
         "id": "3",
         "name": "Test 3",
         "tag": ["green"]
 }]

 function findColorId(color){
     return items.filter((d)=> {
         if(String(d.tag).includes(color)){
               return d;
         }
     });
 }

 findColorId('red');
0
Biplab Malakar 20 nov. 2018 à 11:20

Vous pouvez utiliser Array.prototype.filter ():

La méthode filter() crée un nouveau tableau avec tous les éléments qui réussissent le test implémenté par la fonction fournie.

Et Array.prototype.map ():

La méthode map() crée un nouveau tableau avec les résultats de l'appel d'une fonction fournie sur chaque élément du tableau appelant.

const colors = [{
  "id": "1",
  "name": "Test 1",
  "tag": ["blue","red", "yellow"]
},
{
  "id": "2",
  "name": "Test 2",
  "tag": ["red", "yellow"]
},
{
  "id": "3",
  "name": "Test 3",
  "tag": ["green"]
}]

function filteredColors(colorsArr, c){
  return colorsArr.filter(i => i.tag.includes(c)).map(i => ({id: i.id}));
}
console.log(filteredColors(colors, 'red'));
console.log(filteredColors(colors, 'green'));
0
Mamun 20 nov. 2018 à 11:52

Il n'y a pas besoin de lodash, vérifiez simplement si le tag tableau includes que vous recherchez:

const arr = [{
  "id": "1",
  "name": "Test 1",
  "tag": ["blue","red", "yellow"]
},
{
  "id": "2",
  "name": "Test 2",
  "tag": ["red", "yellow"]
},
{
  "id": "3",
  "name": "Test 3",
  "tag": ["green"]
}];
console.log(
  arr.filter(({ tag }) => tag.includes('red'))
);
2
CertainPerformance 20 nov. 2018 à 11:06