Javascript 在对象内部用0替换未定义的对象的最佳方法是什么?
以下是示例对象: 对象内的值实际上不称为value1、value2等 他们都有不同的名字 数据是从api获得的数据Javascript 在对象内部用0替换未定义的对象的最佳方法是什么?,javascript,object,Javascript,Object,以下是示例对象: 对象内的值实际上不称为value1、value2等 他们都有不同的名字 数据是从api获得的数据 let object = { id: '1', gen: { value1: data.value1, value2: data.value2, value3: data.value3, value4: data.value4, // etc }, somethingelse: { one: { value1:
let object = {
id: '1',
gen: {
value1: data.value1,
value2: data.value2,
value3: data.value3,
value4: data.value4, // etc
},
somethingelse: {
one: {
value1: data.value1,
value2: data.value2,
value3: data.value3,
value4: data.value4, // etc
},
two: {
value1: data.value1,
value2: data.value2,
value3: data.value3,
value4: data.value4, // etc
},
three: {
value1: data.value1,
value2: data.value2,
value3: data.value3,
value4: data.value4, // etc
}
}
};
我知道我可以在每个代码中添加| | 0,但这将是很多难看的代码
有时还会有数学运算返回NaN
我不能只做:
如果object.value1 object.value1=0因为我需要100行重复的代码来完成此操作您可以将相同的逻辑应用于具有更多循环的更深层次的对象:
for(let key in myObject) {
if(myObject[key] === undefined || myObject[key] === null)
myObject[key] = 0;
}
如果您迭代的对象中有更多的对象,则可以使用键中的键等等。您可以使用递归将未定义的替换为使用递归的0 常量数据={} 让object={id:'1',gen:{value1:data.value1,value2:data.value2,value3:data.value3,value4:data.value4,},somethingelse:{one:{value1:data.value1,value2:data.value2,value3:data.value3,value4:data.value4,},两个:{value1:data.value1:data.value1,value3:data.value3,value4:data.value4,},三个:{value1:data.value1,value2:data.value2,value3:data.value3,value4:data.value4,}}; 函数removeUnfobj{ obj中的forlet键{ ifobj[key]&&typeofobj[key]==对象{ removeUnfobj[键] } else obj[key]=obj[key]==未定义?0:obj[key] } } 移除目标;
console.logobject如果您可以使用ES6,您可以将数据包装成一个返回0而不是未定义的值。然后使用该值使您的对象: 设real_data={value1:10,value2:2} //真实数据代理 让数据=新的Proxyreal\u数据{ 获取目标、名称、接收者{ 让val=Reflect.gettarget,name,receiver; 返回值===未定义?0:val } }; //现在就使用数据 让object={id:'1',gen:{value1:data.value1,value2:data.value2,value3:data.value3,value4:data.value4,},somethingelse:{one:{value1:data.value1,value2:data.value2,value3:data.value3,value4:data.value4,},两个:{value1:data.value1:data.value1,value3:data.value3,value4:data.value4,},三个:{value1:data.value1,value2:data.value2,value3:data.value3,value4:data.value4,};
console.LogoObject您是如何创建此对象的?您可以使用递归并在创建对象后更新对象,但这似乎会适得其反。您可以使用data.value1 | | 0,如果data.value1未定义或为null,或者在ecmascript中为假值,则它将取0,否则它将取data.value1值。是否可以将实际的API结果添加为excerpt?使用| | 0是一种可行的方法,当然可以通过某种循环来保存重复。但是,如何做到这一点取决于实际数据的结构,是否有其他非数值,是否只需要格式化某些部分,是否必须递归地完成等。请创建一个。我相信您会没有在每个嵌套的obejct中使用data.value1。问题是api没有返回未定义的my对象,而是返回它。如果它的undefined@Beke,这不是与本例中的情况类似吗?对于键value3和value4,real_数据没有任何值?对于任何未定义或定义为unde的键,这将返回0罚款。