1
votes

filtre le tableau et renvoie l'objet contenant les chaînes les plus proches à l'intérieur d'un tableau à l'intérieur d'un objet, à l'intérieur d'un autre tableau

Je veux retourner l'objet contenant les chaînes les plus proches à l'intérieur d'un tableau à l'intérieur d'un objet, à l'intérieur d'un autre tableau, my indexOf () ne renvoie que la chaîne exacte comme true.

J'ai essayé de remplacer indexOf () par march () , matches () , includes () rien ne fonctionne.

Veuillez nous conseiller

[
  { supplyList: ["apple", "orange", "red apple"] },
  { supplyList: ["apple juice", "drink", "green apple", "dream app"] }
];

la sortie que je souhaite est tous les objets contenant les chaînes les plus proches par exemple:

let SellerList = [
  { supplyList: ["apple", "orange", "red apple"] },
  { supplyList: ["apple juice", "drink", "green apple", "dream app"] },
  { supplyList: ["lamp", "dog", "cat", "man"] }
];

let stringToMatch = "app";

let filteredList = SellerList.filter(
  (txt) => txt.supplyList.indexOf(stringToMatch) !== -1
);


4 commentaires

à partir du terme de recherche app qui montre quel serait le résultat attendu et pourquoi? et y a-t-il plus d'un objet dans le tableau SellerList ?


@Mario oui j'en ai plus d'un


Pour stringToMatch = "app" quelle est la sortie attendue?


@Mario tous les objets contenant les chaînes les plus proches par exemple: voir ma question je l'édite avec l'exemple de sortie attendu


3 Réponses :


2
votes

Vous avez un tableau à l'intérieur d'un objet, à l'intérieur d'un autre tableau, vous voulez donc cibler ce tableau interne et appeler le filtre dessus:

let SellerList = [{
  supplyList: ['apple', 'orange', 'red apple']
}];

let stringToMatch = 'app';

let filteredList = SellerList[0].supplyList.filter(txt => txt.indexOf(stringToMatch) !== -1);

console.log(filteredList)


1 commentaires

merci, mais comment puis-je le faire quand j'ai plus d'un objet? dans le tableau avec un autre tableau de chaînes à l'intérieur?



0
votes

Vous devriez essayer de faire correspondre les chaînes internes des supplyLists au lieu des tableaux eux-mêmes.

let SellerList = [ 
                     { supplyList: ['apple','orange','red apple'] },
                     { supplyList: ['apple juice','drink','green apple'] } 
                   ];
  
  let stringToMatch = 'app';

  let filteredList = SellerList.map(list => {
    
    return list.supplyList.filter(item => {
      return item.indexOf(stringToMatch) >= 0
    })
  
  });
  
  
  console.log(filteredList);


1 commentaires

merci, comment puis-je reruen l'objet contenant les chaînes les plus proches? par exemple: {supplyList: ['apple juice', 'drink', 'green apple']} j'ai également édité ma question avec le résultat attendu



0
votes

Veuillez essayer la solution suivante

let SellerList = [
  { supplyList: ["apple", "orange", "red apple"] },
  { supplyList: ["apple juice", "drink", "green apple", "dream app"] },
  { supplyList: ["lamp", "dog", "cat", "man"] },
];

let stringToMatch = "app";

let filteredList = SellerList.reduce((previousValue, currentValue) => {
  if (currentValue.supplyList.join().includes(stringToMatch)) {
    previousValue = [...previousValue, { supplyList: currentValue.supplyList }];
  }

  return previousValue;
}, []);

console.log(filteredList);

Voir


0 commentaires