Javascript 比较和处理对象中的布尔值
我遇到的问题是,我有一对相同对象的数组,看起来像:Javascript 比较和处理对象中的布尔值,javascript,arrays,performance,loops,Javascript,Arrays,Performance,Loops,我遇到的问题是,我有一对相同对象的数组,看起来像: [ { error:null, permissions:{ perm1:false, perm2:true, perm3:false, etc... } }, { error:null, permissions:{ pe
[
{
error:null,
permissions:{
perm1:false,
perm2:true,
perm3:false,
etc...
}
},
{
error:null,
permissions:{
perm1:true,
perm2:false,
perm3:false,
etc...
}
},
{
error:null,
permissions:{
perm1:false,
perm2:false,
perm3:false,
etc...
}
},
etc..
]
{
error:null,
permissions:{
perm1:true,
perm2:true,
perm3:false,
etc...
}
}
我需要做的是将它们“添加”在一起,得到如下结果:
[
{
error:null,
permissions:{
perm1:false,
perm2:true,
perm3:false,
etc...
}
},
{
error:null,
permissions:{
perm1:true,
perm2:false,
perm3:false,
etc...
}
},
{
error:null,
permissions:{
perm1:false,
perm2:false,
perm3:false,
etc...
}
},
etc..
]
{
error:null,
permissions:{
perm1:true,
perm2:true,
perm3:false,
etc...
}
}
我想到了这段代码:
var newObj = {};
for(myObject in objectArray){
for(var [key, value] of Object.entries(myObject)){
newObj[key] = (newObj[key] === true ? true : value)
}
}
return newObj;
但这似乎不是真正有效的(或者像它会工作…),我需要最有效和快速的方法。如果您可以为我指出正确的方向,或者将我链接到一个可能对我有帮助的问题。如果所有对象中的键都相同,您可以获取一个对象键的数组,然后迭代每个键,并通过检查
来确定它是否应该为真。一些对象中的具有true:
const arr=[
{
错误:null,
权限:{
perm1:false,
perm2:是的,
perm3:错,
}
},
{
错误:null,
权限:{
perm1:是的,
perm2:错,
perm3:错,
}
},
{
错误:null,
权限:{
perm1:false,
perm2:错,
perm3:错,
}
},
];
const errorObj=arr.find(({error})=>error);
if(errorObj){
抛出新错误(errorObj.Error);
}
const keys=Object.keys(arr[0]。权限);
const permissions=Object.fromEntries(keys.map(
key=>[key,arr.some({permissions}=>permissions[key])]
));
log({错误:null,权限})代码>如果所有对象中的键都相同,则可以获取对象键之一的数组,然后迭代每个键,并通过检查来确定其是否为真。某些对象的值为真:
const arr=[
{
错误:null,
权限:{
perm1:false,
perm2:是的,
perm3:错,
}
},
{
错误:null,
权限:{
perm1:是的,
perm2:错,
perm3:错,
}
},
{
错误:null,
权限:{
perm1:false,
perm2:错,
perm3:错,
}
},
];
const errorObj=arr.find(({error})=>error);
if(errorObj){
抛出新错误(errorObj.Error);
}
const keys=Object.keys(arr[0]。权限);
const permissions=Object.fromEntries(keys.map(
key=>[key,arr.some({permissions}=>permissions[key])]
));
log({错误:null,权限})代码>请尝试此选项
var对象数组=[
{
错误:null,
权限:{
perm1:false,
perm2:是的,
perm3:错误
}
},
{
错误:null,
权限:{
perm1:是的,
perm2:错,
perm3:错误
}
},
{
错误:null,
权限:{
perm1:false,
perm2:错,
perm3:错误
}
}
]
var newObj=null;
for(objectArray中的myObject){
设x=objectArray[myObject]
if(newObj==null){
newObj=x;
}否则{
Object.key(x.permissions.map)(i=>{
如果(!newObj.permissions[i]){
newObj.permissions[i]=x.permissions[i];
}
})
}
}
console.log(newObj)
请尝试此操作
var对象数组=[
{
错误:null,
权限:{
perm1:false,
perm2:是的,
perm3:错误
}
},
{
错误:null,
权限:{
perm1:是的,
perm2:错,
perm3:错误
}
},
{
错误:null,
权限:{
perm1:false,
perm2:错,
perm3:错误
}
}
]
var newObj=null;
for(objectArray中的myObject){
设x=objectArray[myObject]
if(newObj==null){
newObj=x;
}否则{
Object.key(x.permissions.map)(i=>{
如果(!newObj.permissions[i]){
newObj.permissions[i]=x.permissions[i];
}
})
}
}
console.log(newObj)
您可以使用.reduce()
将数组中的第一个对象作为累加器。对于数组中的每个对象,您可以循环遍历累加器权限中的键,并根据当前对象的值是否为true
/false
更改其值:
const arr=[{error:null,权限:{perm1:false,perm2:true,perm3:false,}},{error:null,权限:{perm1:true,perm2:false,perm3:false,},{error:null,权限:{perm1:false,perm2:false,perm3:false,}];
const[{error,permissions:p}]=arr;
const res=arr.reduce((acc,{permissions})=>{
用于(根据权限中的常量键)
acc.permissions[key]=acc.permissions[key]| | permissions[key];
返回acc;
},{错误,权限:{…p});
控制台日志(res)
可以使用.reduce()
将数组中的第一个对象作为累加器。对于数组中的每个对象,您可以循环遍历累加器权限中的键,并根据当前对象的值是否为true
/false
更改其值:
const arr=[{error:null,权限:{perm1:false,perm2:true,perm3:false,}},{error:null,权限:{perm1:true,perm2:false,perm3:false,},{error:null,权限:{perm1:false,perm2:false,perm3:false,}];
const[{error,permissions:p}]=arr;
const res=arr.reduce((acc,{permissions})=>{
用于(根据权限中的常量键)
acc.permissions[key]=acc.permissions[key]| | permissions[key];
返回acc;
},{错误,权限:{…p});
控制台日志(res)代码>关于错误
,它将始终是null
,或者您希望新对象在那里有什么?最大的问题是我从另一个函数获取这些对象,该函数与API联系以获取数据如果其中任何一个失败,错误将存储在