我在骨干应用程序中有一个parse方法,它从数组中构建一个JSON对象,但是如果一个值为空,则它被写为undefined,这会破坏其他方法的行为,我需要将未定义的值设置为空字符串,我很难做到这一点,非常感谢任何帮助。
注意:在这种情况下,我试图将value的值设置为空字符串,如果obj [key] = undefined
代码:
parse: function(data){
return data.map(function(obj){
var key = Object.keys(obj)[0];
return {
attribute: key,
value: obj[key]
};
});
}
toQueryString: function(){
var obj = this.toQueryData(),
qs = [];
for (key in obj) {
qs.push(key + "=" + obj[key]);
}
return qs.join('&')
},
toQueryData: function(){
return this.reduce(function(memo, model){
memo[model.get('attribute')] = model.get('value');
return memo
}, {});
}
答案 0 :(得分:2)
使用三元条件:
value: obj[key] ? obj[key] : ""
或(正如@Derek朕会功夫所指出的那样),
value: obj[key] || ""
答案 1 :(得分:1)
您需要检查对象是否具有属性 - 键。
value: obj.hasOwnProperty(key) && obj[key] != undefined ? obj[key] : ""
//或者你可以这样写(我更喜欢,认为括号语法有点丑陋):
value: obj.hasOwnProperty(key) && obj.key != undefined ? obj.key : ""
答案 2 :(得分:1)
由于您使用主干,您可以使用下划线defaults
方法:
return _.defaults({attribute: key, value: obj[key]}, {value: ''});
答案 3 :(得分:0)
toQueryString: function(){
var obj = this.toQueryData(),
qs = [];
for (key in obj) {
qs.push(key + "=" + (obj.hasOwnProperty(key) && obj.key != undefined ? obj.key : ""));
}
return qs.join('&')
}
这最终成为了解决方案,感谢Marko!