0

プロパティの存在が確実でないマルチレベルの js オブジェクトを常に処理する必要があります。

try { value1 = obj.a.b.c; } catch(e) { value1 = 1; }
try { value2 = obj.d.e.f; } catch(e) { value2 = 2; }
......

多くの try キャッチを必要としない、より簡単な方法または汎用関数 (例: ifnull(obj.def, 2) ) はありますか?

4

3 に答える 3

5
var value1 = (obj.a && obj.a.b && obj.a.b.c) || 1;

http://jsfiddle.net/DerekL/UfJEQ/

またはこれを使用します:

function ifNull(obj, key, defVal){
    var keys = key.split("."), value;
    for(var i = 0; i < keys.length; i++){
        if(typeof obj[keys[i]] !== "undefined"){
            value = obj = obj[keys[i]];
        }else{
            return defVal;
        }
    }
    return value;
}

var value1 = ifNull(obj, "a.b.c", 1);
于 2013-08-19T03:41:30.680 に答える
0

lodashを使用すると、これを簡単に実行できます**(ノードが存在し、そのノードの空のチェック)** ..

var lodash = require('lodash-contrib');

function invalidateRequest(obj, param) {
    var valid = true;

    param.forEach(function(val) {
        if(!lodash.hasPath(obj, val)) {
            valid = false;
        } else {
            if(lodash.getPath(obj, val) == null || lodash.getPath(obj, val) == undefined || lodash.getPath(obj, val) == '') {
                valid = false;
            }
        }
    });
    return valid;
}

使用法:

leaveDetails = {
              "startDay": 1414998000000,
              "endDay": 1415084400000,
              "test": { "test1" : 1234 }
    };

    var validate;

    validate = invalidateRequest(leaveDetails, ['startDay', 'endDay', 'test.test1']);

ブール値を返します。

于 2014-11-06T08:21:40.100 に答える