1

我在 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?*

4

3 回答 3

1

你可以像这样使用它:

function(obj) {

        mongooseDoc = new Doc({
                value1: obj.value1,
                value2: obj.value2,
                value3: obj.value3 || "",
                value4: obj.value4 || "",
                value5: obj.value5 || ""
        });

}
于 2013-11-06T22:32:52.320 回答
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 演示

多个对象的另一个更新:

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 演示

于 2013-11-06T22:35:25.320 回答
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');
于 2013-11-06T23:20:56.137 回答