#javascript #reactjs
#javascript #reactjs
Вопрос:
Я хочу отфильтровать массив и получить только те значения, для которых значение HasAccess равно false. Единственная проблема заключается в том, что HasAccess не всегда существует. Иногда значение Settings равно null. Как я могу этим управлять?
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"
}
}
Я перепробовал много разных вещей, но это то, что я получил на данный момент.
const users = result.data.filter((number) => {
//number.Settings != null
if (typeof number.Settings == "null") {
return true;
} else {
return number;
}
})
Комментарии:
1. Вы возвращаете true, если Setting == «null», это означает, что этот элемент не должен отфильтровываться, если он равен «null», также «null» не совпадает с null.
2. стоит отметить, что в JS существует известная и давняя ошибка, из-за которой
typeof null
возникает"object"
. На самом деле никакого значенияx
не имеетtypeof x == "null"
3. @chriss — OP использует
typeof
.4. Sry missread но спасибо вам обоим за указание, другая проблема с всегда возвращаемым значением, то есть без фильтрации, все еще актуальна
Ответ №1:
Если вы хотите получить все записи, для которых Settings.HasAccess
определено и является false
, используйте логическое и ( amp;amp;
), чтобы сначала проверить, существует ли settings
объект, а затем сравнить HasAccess
свойство с false
использованием ===
.
Здесь true
будет возвращено, только если Settings
существует и для HasAccess
свойства установлено значение 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 amp;amp; item.Settings.HasAccess === false;
})
console.log(users);
Если вы хотите получить все результаты, для которых HasAccess
не определено или является ложным, используйте вместо or ( ||
) оператор not ( !
).
Здесь будет возвращено значение true, если:
Settings
не существуетHasAccess
свойство не определеноHasAccess
существует, но его значение неверно (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;
})
console.log(users);
Ответ №2:
Я хочу отфильтровать массив и получить только те значения, для которых значение HasAccess равно false, иногда значение Settings равно null
Просто проверьте наличие Settings amp;amp; (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 amp;amp; (Settings.HasAccess === false))
console.log(op)
Ответ №3:
Вы можете попробовать что-то вроде:
if (number amp;amp; number.Settings) {
return number;
} else {
return true;
}
Комментарии:
1.
number.Settings !== 'null'
проверяет, является ли это строкой'null'
, а не значениемnull
.2. Отдельно, если вы выполняете проверку на достоверность с
number.Settings
последующимamp;amp;
, вы знаете , что это ниnull
ниundefined
, поскольку они оба ложные.