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"
}
}
3 Réponses :
Vous pouvez essayer quelque chose comme:
if (number && number.Settings) {
return number;
} else {
return true;
}
number.Settings! == 'null' vérifie s'il s'agit de la chaîne 'null' , pas si c'est la valeur null code>.
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.
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)
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:
paramètres n'existent pas 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);
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 où
typeof nullaboutit à"object"Aucune valeurxn'a en faittypeof 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é