忽略对象中的未定义值

时间:2013-11-06 22:27:04

标签: javascript underscore.js

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

3 个答案:

答案 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');