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对象的键值对