Javascript 访问对象中的嵌套键并将其与其他对象键进行比较,但第二个是对象数组

Javascript 访问对象中的嵌套键并将其与其他对象键进行比较,但第二个是对象数组,javascript,arrays,reactjs,object,Javascript,Arrays,Reactjs,Object,因此,我在尝试比较和访问嵌套对象中的数据时遇到了这个问题,并将tham与具有对象的数组(这不是嵌套的)进行比较 要模拟它,请执行以下操作: const members = [ { name: 'Angelica', age: '25', sex: 'female', phone: '123456789', }, { name: 'Dominic', age: '30

因此,我在尝试比较和访问嵌套对象中的数据时遇到了这个问题,并将tham与具有对象的数组(这不是嵌套的)进行比较

要模拟它,请执行以下操作:

const members = [
      {
        name: 'Angelica',
        age: '25',
        sex: 'female',
        phone: '123456789',
      },
      {
        name: 'Dominic',
        age: '30',
        sex: 'male',
        phone: '987654321',
      },
    ];

    const updates = {
      123456789: {
        date: '12.02-2019',
        warnings: {},
        errors: {}
      },
      987654321: {
        date: '20.01-2020',
        warnings: {
          somethinghere: {
            warning1: 'warning',
            allok: 'yes',
          }
        },
        errors: {},
      }
    }
所以首先我需要检查phone-in成员是否等于key-in对象,然后我需要找出是否有任何警告(警告不是空的)。我尝试使用forEach作为
members.forEach((member)=>{
if(Object.keys(updates)==member.name)}
但它似乎不起作用。更新中的类似警告的信息最初没有声明,但在某些更改后将以状态出现。

对象。键(更新)
是一个数组,因此您应该使用
包含

if (Object.keys(updates).includes(member.phone) )

您可以使用
map
Object.keys
方法

const members=[{姓名:'Angelica',年龄:'25',性别:'female',电话:'123456789',},{姓名:'Dominic',年龄:'30',性别:'male',电话:'987654321',},];
const updates={123456789:{date:'12.02-2019',警告:{},错误:{},987654321:{date:'20.01-2020',警告:{somethinghere:{warning1:'warning',allok:'yes',},错误:{},}
var result=members.map(({phone})=>({phone,hasWarnings:Object.keys(更新[phone].warnings.length>0}));

console.log(result);
您只需执行
const update=updates[member.phone];
即可查看更新是否可用,如果更新密钥集中不存在此类电话,则此项将不定义

然后
const warnings=Object.keys(update.warnings);
将为您提供警告键列表

const成员=[{
名称:“当归”,
年龄:"25",,
性别:'女性',
电话:123456789,
}, {
姓名:'多米尼克',
年龄:"30",,
性别:'男',
电话:987654321,
}, ];
常数更新={
123456789: {
日期:2019年2月12日,
警告:{},
错误:{}
},
987654321: {
日期:“20.01-2020”,
警告:{
这里有些东西:{
警告1:‘警告’,
allok:“是的”,
}
},
错误:{},
}
}
成员。forEach((成员)=>{
const update=更新[member.phone];
如果(更新){
const warnings=Object.keys(update.warnings);
控制台日志(警告);
如果(warnings.length==0){
log(`对成员${member.name}的更新没有警告');
}
}否则{
log(`member${member.name}`没有更新);
}
});
const成员=[
{
名称:“当归”,
年龄:"25",,
性别:'女性',
电话:123456789,
},
{
姓名:'多米尼克',
年龄:"30",,
性别:'男',
电话:987654321,
},
];
常数更新={
123456789: {
日期:2019年2月12日,
警告:{},
错误:{}
},
987654321: {
日期:“20.01-2020”,
警告:{
这里有些东西:{
警告1:‘警告’,
allok:“是的”,
}
},
错误:{},
}
}
members.forEach(member=>{
Object.entries(updates).forEach(([key,value])=>{
if(key==member.phone&&JSON.stringify(value.warnings)=='{}'){
console.log(键)
}
})

})
您想检查phone only或all members属性吗?@ZivBen或phone only,然后我再做进一步的操作。好的,请参见下面的答案:-)是否还可以检查value.warnings对象的键数是否与错误数相同?因此,如果警告中有两个键,那么如果错误也有两个键,则为true:
if(Object.keys(value.warnings)。length==Object.keys(value.errors)。length)