0
votes

Comment filtrer sur un objet en JavaScript correctement?

Je saisis un identifiant d'autorisation et je tente de filtrer un objet qui possède ces autorisations. Ceci est une version concise de l'objet JSON

let len = this.props.permissions.length;
    for (let i = 0; i < len; i++){
      if (this.props.permissions[i].dependsOn[0] !== null){
        // return this.props.permissions[i].id // Should return INS-SH-U
        if (permissionId === this.props.permissions[i].dependsOn[0]){
          // return this.props.permissions[i].id
          console.log(this.props.permissions[i].id);
        }
      }
    }
    return null;


2 commentaires

S'il vous plaît montrer quelles recherches vous avez faites en résolvant cette vous-même et quelles tentatives que vous avez faites.


@Hereticmonkey Bonjour Désolé - j'ai ajouté ma tentative de la solution sur le dernier édition. Mais je vois qu'il y a une solution plus concise.


4 Réponses :


3
votes

Vous pouvez utiliser filtre code> afin de filtrer votre tableau, puis utilisez la carte pour obtenir l'identifiant uniquement:

EDIT: Ajouté Inclus STRY> P>

const checkId = 'SOME ID'
const ids = yourData.filter(obj => obj['dependsOn'] !== null && obj['dependsOn'].includes(checkId)).map(obj => obj.id)


1 commentaires

Merci pour cela! Vous êtes un économiseur de vie vrai.



0
votes

Si je comprends bien correctement, vous auriez besoin de quelque chose comme le suivant

const ids = array.filter(obj => obj.dependsOn && obj.dependsOn.includes('INS-SH-V')).map(cur => cur.id);


1 commentaires

obj.dependson est une matrice, pas une chaîne ... ils ne seront jamais égaux.



2
votes

Vous pouvez utiliser filtre code> pour cela et enfin mapper code> le tableau car vous ne voulez que les identifiants. J'ai ajouté un objet supplémentaire qui a plus d'un identifiant dans dependonon code> à titre d'exemple.

p>

const inputArr = [
  {
    "id": "INS-SH-V",
    "name": "View Sharing Functionality",
    "description": "Access to view Email and Schedule windows",
    "group": "Sharing",
    "scopeable": false,
    "featureId": "INS-BE",
    "scopeExclusions": null,
    "dependsOn": null
  },
  {
    "id": "INS-SH-U",
    "name": "Manage Sharing Functionality",
    "description": "Access to send emails and schedule jobs",
    "group": "Sharing",
    "scopeable": false,
    "featureId": "INS-BE",
    "scopeExclusions": null,
    "dependsOn": [
      "INS-SH-V"
    ]
  },
  {
    "id": "INS-SH-asdsd",
    "name": "View Sharing Functionality",
    "description": "Access to view Email and Schedule windows",
    "group": "Sharing",
    "scopeable": false,
    "featureId": "INS-BE",
    "scopeExclusions": null,
    "dependsOn": [
        'INS-SH-V',
        'INS-SH-A'
    ]
  },
 ];

const idToCheck = 'INS-SH-V';
const result = inputArr.filter(obj => (obj.dependsOn?.includes(idToCheck) || false)).map(({ id }) => id);
console.log(result);


0 commentaires

0
votes

Voici une solution à l'aide d'une boucle pour boucle,

p>

let data = [{
    "id": "INS-SH-V",
    "name": "View Sharing Functionality",
    "description": "Access to view Email and Schedule windows",
    "group": "Sharing",
    "scopeable": false,
    "featureId": "INS-BE",
    "scopeExclusions": null,
    "dependsOn": null
  },
  {
    "id": "INS-SH-U",
    "name": "Manage Sharing Functionality",
    "description": "Access to send emails and schedule jobs",
    "group": "Sharing",
    "scopeable": false,
    "featureId": "INS-BE",
    "scopeExclusions": null,
    "dependsOn": [
      "INS-SH-V"
    ]
  }
]

const filteredData = data.filter(el => el.dependsOn && el.dependsOn.includes('INS-SH-V')).map(v => v.id)

console.log(filteredData)


0 commentaires