1
votes

Comment filtrer un tableau qui a parfois une valeur nulle?

Je souhaite filtrer un tableau et obtenir uniquement les valeurs où HasAccess est défini sur false. Le seul problème est que HasAccess n'existe pas toujours. Parfois, les paramètres sont nuls. Comment puis-je gérer cela?

const users = result.data.filter((number) => {

          //number.Settings != null
           if (typeof number.Settings == "null") {
            return true;
          } else {
            return number;
          }
          })

J'ai essayé beaucoup de choses différentes, mais c'est ce que j'ai en ce moment.

    0:{
ClientCodeRegional: (2) ["29000-A", "122214"]
CreatedUpdatedBy: null
Email: "testuserthree@for.deletion"
Id: "11ad1dfb-3cd6-4db6-87a9-8063bb12504d"
Settings: {
          CsmPassword: ""
          CsmUser: ""
          HasAccess: false
          IsAdmin: true
          IsInternal: false
          IsLocked: true
          MarketAreaCode: ""
          Role: "Administrator"
          Updated: null
          UpdatedBy: null
          UserId: "11ad1dfb-3cd6-4db6-87a9-8063bb12504d"
          }
}


4 commentaires

Vous retournez true si Setting == "null", cela signifie que cet élément ne doit pas être filtré s'il est "null". De plus, "null" n'est pas identique à null.


il convient de noter qu'il existe un célèbre et long bogue persistant dans JS typeof null aboutit à "object" Aucune valeur x n'a en fait typeof x == "null"


@chriss - OP utilise typeof .


Sry mal lu mais merci à tous les deux pour le point, l'autre problème de toujours renvoyer la valeur, c'est-à-dire ne pas filtrer, est toujours d'actualité


3 Réponses :


0
votes

Vous pouvez essayer quelque chose comme:

if (number && number.Settings) {
  return number;
} else {
  return true;
}


2 commentaires

number.Settings! == 'null' vérifie s'il s'agit de la chaîne 'null' , pas si c'est la valeur null .


Séparément, si vous effectuez un test de vérité sur number.Settings suivi de && , vous savez que ce n'est ni null ni undefined , car ils sont tous les deux faux.



1
votes

Je veux filtrer un tableau et obtenir uniquement les valeurs où HasAccess est défini sur false, parfois les paramètres sont nuls

Il suffit de vérifier les Paramètres && (HasAccess === false)

let arr = [{ClientCodeRegional:["29000-A","122214"],CreatedUpdatedBy:null,Email:"testuserthree@for.deletion",Id:"11ad1dfb-3cd6-4db6-87a9-8063bb12504d",Settings:{CsmPassword:"",CsmUser:"",HasAccess:false,IsAdmin:true,IsInternal:false,IsLocked:true,MarketAreaCode:"",Role:"Administrator",Updated:null,UpdatedBy:null,UserId:"11ad1dfb-3cd6-4db6-87a9-8063bb12504d",}},{ClientCodeRegional:["29000-A","122214"],CreatedUpdatedBy:null,Email:"testuserthree@for.deletion",Id:"11ad1dfb-3cd6-4db6-87a9-8063bb12504d",Settings:{CsmPassword:"",CsmUser:"",HasAccess:null,IsAdmin:true,IsInternal:false,IsLocked:true,MarketAreaCode:"",Role:"Administrator",Updated:null,UpdatedBy:null,UserId:"11ad1dfb-3cd6-4db6-87a9-8063bb12504d"}},{ClientCodeRegional:["29000-A","122214"],CreatedUpdatedBy:null,Email:"testuserthree@for.deletion",Id:"11ad1dfb-3cd6-4db6-87a9-8063bb12504d",Settings:{CsmPassword:"",CsmUser:"",//HasAccess:null,
IsAdmin:true,IsInternal:false,IsLocked:true,MarketAreaCode:"",Role:"Administrator",Updated:null,UpdatedBy:null,UserId:"11ad1dfb-3cd6-4db6-87a9-8063bb12504d"}}]

let op = arr.filter(({Settings})=> Settings && (Settings.HasAccess === false))
console.log(op)

0 commentaires

3
votes

Si vous souhaitez obtenir toutes les entrées pour lesquelles Settings.HasAccess est défini et est false , utilisez un et ( && ) pour vérifier si l'objet settings existe d'abord, puis comparez la propriété HasAccess avec false en utilisant === .

Ici, true ne sera renvoyé que si Settings existe et si une propriété HasAccess est définie sur false. p >

const result = {
  data: [
    { Settings: { HasAccess: true  }, a: 1 },
    { Settings: { HasAccess: false }, a: 2 },
    { Settings: {                  }, a: 3 },
    {                                 a: 4 }
  ]
};

const users = result.data.filter(item => {
  return !item.Settings || !item.Settings.HasAccess;
})

console.log(users);

Si vous souhaitez obtenir tous les résultats pour lesquels HasAccess n'est pas défini ou faux , utilisez ou à la place ( || ) avec l'opérateur not (! ).

Ici, true sera renvoyé si:

  • Les paramètres n'existent pas
  • La propriété
  • HasAccess n'est pas définie
  • HasAccess existe mais sa valeur est falsifiée (null, undefined, false)

const result = {
  data: [
    { Settings: { HasAccess: true  }, a: 1 },
    { Settings: { HasAccess: false }, a: 2 },
    { Settings: {                  }, a: 3 },
    {                                 a: 4 }
  ]
};

const users = result.data.filter(item => {
  return item.Settings && item.Settings.HasAccess === false;
})

console.log(users);


0 commentaires