J'ai un tableau comme ça:

const arr = [{id: "12f"},{id: "12F"},{id: "13"}]
const itemToBeFound = {id: "12f"}

Je veux pouvoir trouver cet élément en utilisant quelque chose comme RegExp(/12f/i).test(string)

Donc, le point d'utiliser l'expression rationnelle doit être insensible à la casse. Je sais que je pourrais utiliser toLowerCase ou toUpperCase, je voulais juste savoir comment le faire de cette façon.

Donc arr.find(({id}) => id == regexp) quelque chose à cet effet. Je n'ai pas encore réussi à comprendre comment y parvenir.

0
Taylor Austin 13 avril 2018 à 15:46

3 réponses

Meilleure réponse

Vous devez simplement tester la propriété par rapport à RegExp

const arr = [{
  id: "12f"
}, {
  id: "12F"
}, {
  id: "13"
}];
var regexp = new RegExp(/12f/i);
console.log(arr.find(({id}) => /12f/i.test(id)))
console.log(arr.filter(({id}) => /12f/i.test(id)))
3
Satpal 13 avril 2018 à 12:58

Ce one-liner fait tout le travail, selon la configuration actuelle des questions:

const foundItems = arr.filter((item) => (/[itemToBeFound.id]/gi).test(item.id))

1
Samuli Hakoniemi 13 avril 2018 à 12:54

Les pattern et flags params de RegExp peut être utilisé pour effectuer une comparaison dynamique comme ceci:

// Loose Match.
const filter = (array, target) => {
  const regex = new RegExp(target.id, 'i')
  return array.filter(x => regex.test(x.id))
}

// Proof.
console.log('12f', filter([{id: "12f"},{id: "12F"},{id: "13"}], {id: "12f"}))
console.log('13', filter([{id: "12f"},{id: "12F"},{id: "13"}], {id: "13"}))
1
Arman Charan 13 avril 2018 à 13:21