Javascript 如何使用键详细信息修改嵌套对象的属性

Javascript 如何使用键详细信息修改嵌套对象的属性,javascript,object,Javascript,Object,我有一个嵌套对象,其结构如下: let obj = { id1: { key1: value1, files: { fileid1: {}, fileid2: {} } }, id2: { key1: value1, files: { fileid3: {}, fileid4: {} } } } 我有一个现有的文件id,我需要从该对象中找到该文件id并更新该对象的数据。 假设我的文件

我有一个嵌套对象,其结构如下:

let obj = {
  id1: {
    key1: value1,
    files: {
      fileid1: {},
      fileid2: {}
    }
  },
  id2: {
    key1: value1,
    files: {
      fileid3: {},
      fileid4: {}
    }
  }
}
我有一个现有的文件id,我需要从该对象中找到该文件id并更新该对象的数据。 假设我的文件id等于fileid3 我如何才能做到这一点?

您可以在对象的上使用。对于每个值(即对象),可以检查
.files
对象是否具有传递到函数中的
fileid
属性。如果是,您可以使用返回
true
。然后,您可以在
.find()
的返回值上使用
.files[id]
来获取对象:

const obj={id1:{key1:{value1],文件:{fileid1:{},fileid2:{}},id2:{key1:{value1],文件:{fileid3:{},fileid4:{}};
常量findObjectByFile=(对象,id)=>
(Object.values(obj.find({files})=>files.hasOwnProperty(id))|{files:{}).files[id];
const file_obj=findObjectByFile(obj,fileid);
文件_obj.foo=“bar”;

控制台日志(obj)
只需使用
Object.values
迭代对象的第一级,并使用
in
操作符检查
文件
对象是否包含要查找的属性

让obj={
id1:{
键1:“值1”,
档案:{
fileid1:{},
fileid2:{}
}
},
id2:{
键1:“值1”,
档案:{
fileid3:{},
fileid4:{}
}
}
};
editFileID(“fileid3”,“新值”);
log(obj.id2.files.fileid3);
函数editFileID(fileID,newValue){
Object.values(obj).some(函数(obj){
if(对象文件中的文件ID){
obj.files[fileID]=newValue;
返回true;
}
});

}
以下是JSON对象的示例:

const myJSONExample = {
  id1: {
    key1: "value1",
    files: {
      fileid1: "2",
      fileid2: "3"
    }
  },
  id2: {
    key1: "value1",
    files: {
      fileid3: "4",
      fileid4: "5"
    }
  }
}
现在迭代对象,找到您的特定键并更新其值。如果键是嵌套对象,则使用递归

const iterate = (obj) => {
    Object.keys(obj).forEach(key => {

    if(key == 'fileid3'){
      obj[key] = 'asd';
    }
    if (typeof obj[key] === 'object') {
            iterate(obj[key])
        }
    })

}

iterate(myJSONExample);
console.log(myJSONExample);
输出

{ 
  id1: 
     { 
       key1: 'value1', 
       files: 
            { fileid1: '2', fileid2: '3' }
     },  
  id2: 
     { 
       key1: 'value1', 
       files: 
           { fileid3: 'asd', fileid4: '5'} 
     } 
 }
fileid3
值已更新

参考链接:

让obj={
id1:{
键1:“值1”,
档案:{
fileid1:{},
fileid2:{}
}
},
id2:{
键1:“值1”,
档案:{
fileid3:{},
fileid4:{}
}
}
}
函数更改对象(对象、字段、值){
Object.keys(obj.forEach)(key=>{
if(obj[key].files.hasOwnProperty(字段))
obj[key].文件[field]=值;
});
返回obj;
}

log(changeObj(obj,“fileid3”,“新值”)
所以您只想获取对应于
fileid3
的对象?@nickzoum是的,我需要更新fileid3对象的键值对