Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 比较和处理对象中的布尔值_Javascript_Arrays_Performance_Loops - Fatal编程技术网

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联系以获取数据如果其中任何一个失败,错误将存储在