我有一个名为 obj 的对象,它有20个特性。因为我使用json xml2js构建器构建XML,所以我只想插入那些非空的。我有以下代码(变量结果有来自db的sql查询结果,有时它会发生,对象中的属性是未定义的,我想避免)。
var obj = [] ;
for (var i = 0; i < Object.keys(result[0]).length; i++) {
var value = (result[0])[Object.keys(result[0])[i]];
obj[i] = value;
}
什么是最快的解决方案?使用try / catch会使应用程序变慢,或者?
答案 0 :(得分:1)
小提琴会很好。如果它绝对是一个对象,最好使用var in循环,例如:
for (var i in result[0]) {
if (result[0][i]) {
console.log(i, result[0], result[0][i]);
}
}
因此,您可以获取键值对,并检查该值是否为假值。
答案 1 :(得分:0)
我不担心速度,但是可读性和惯用性。在Python中,有一种强烈偏向于尝试某种东西,然后在抛出它时处理异常。
我认为javascript没有任何偏见。
上面显式检查null或undefined(或添加空字符串)的循环可以正常工作。当你删除值为0或空字符串的属性时,检查falsy值是不够的。
for (var i in result[0]) {
if (result[0][i] === null || result[0][i] === undefined) {
delete result[0][i];
}
}
如果您的对象来自其他原型,您可能还需要进行额外检查以确保该属性不会被继承:
obj.hasOwnProperty(i)