我在Javascript(Node.js)中创建了一个将数据保存到数据库的函数。我正在传递一个具有不同数据字段的对象,但不确定该对象是否包含该函数使用的每个数据字段。
var obj = {value1: '1', value2: '2'}
function(obj) {
mongooseDoc = new Doc({
value1: obj.value1,
value2: obj.value2,
value3: obj.value3,
value4: obj.value4,
value5: obj.value5.value6
}
}
这会产生错误,因为obj.value3 - 6未定义。你如何对此进行编码,以便在不使用3 if语句的情况下不会出错?您是否必须首先使用所有可能的值声明整个对象,或者是否有更清晰的方法?
* 更新:在这种情况下,当value5未定义时,如何处理value6? *
答案 0 :(得分:1)
你可以像这样使用它:
function(obj) {
mongooseDoc = new Doc({
value1: obj.value1,
value2: obj.value2,
value3: obj.value3 || "",
value4: obj.value4 || "",
value5: obj.value5 || ""
});
}
答案 1 :(得分:1)
试试这个: 的 JSFIDDLE DEMO 强>
var obj = {value1: '1', value2: '2'};
function hello(obj) {
var Doc = {
value1: obj.value1 || "",
value2: obj.value2 || "",
value3: obj.value3 || "",
value4: obj.value4 || "",
value5: obj.value5 || ""
};
console.log(Doc);
alert(Doc);
}
hello(obj);
会建议使用Underscore.js Great JS Library来处理
使用下划线更新
var obj = {value1: '1', value2: '2'};
function hello(obj) {
var mongooseDoc = _.clone(obj);
console.log(mongooseDoc);
alert("Please See in Console:" + mongooseDoc);
}
<强> JSFIDDLE DEMO 强>
多个对象的另一个更新:
var obj1 = {value1: '1', value2: '2'};
var obj2 = {value3: '3', value4: '4'};
function hello(obj1,obj2) {
var mongooseDoc = _.extend(_.clone(obj1),_.clone(obj2)); //list goes here
console.log(mongooseDoc);
alert("Please See in Console:" + mongooseDoc);
}
hello(obj1,obj2);
<强> JSFIDDLE DEMO 强>
答案 2 :(得分:1)
value5.value6的情况可以像这样处理:
function getProperty(obj, path, defaultValue) {
return path.split('.').reduce(function(obj, x) { return (obj != null) ? obj[x] : undefined; }, obj) || defaultValue;
}
alert(getProperty(obj, 'value5.value5', '123');