2

私はこのような機能を持っています:

Session.get = function(key) {
    if (!window["_SESSION"] || typeof key == 'undefined') {
        return window["_SESSION"] || {};
    }

    if (key.indexOf('.') === -1) {
        return window["_SESSION"][key] || {};
    }

    var keyArr = key.split('.'), val = window["_SESSION"];

    for ( var i = 0; i < keyArr.length; i++) {
        if (typeof val[keyArr[i]] === 'undefined') {
            return null;
        }
        val = val[keyArr[i]];
    }

    return val;
}

この関数を使用すると、関数の外で一時変数を使用せずにネストされた値を取得できます。例Session.get('var.nestedvar')は の戻り値ですwindow[_SESSION']['var']['nestedvar']

どうすれば変数を設定 (解除) できますか? しようとしましdelete val;たが、うまくいきませんでした.. JavaScript 参照はどのように機能しますか? 同様の機能を達成するための代替手段を知っている人はいますか?

4

2 に答える 2

2

次のように親で削除できます。

[10:00:00.380] a = {'root': {'home':'~'}}
[10:00:00.385] ({root:{home:"~"}})
--
[10:00:09.625] b = a['root']
[10:00:09.631] ({home:"~"})
--
[10:00:20.569] delete b['home']
[10:00:20.573] true
[10:00:21.684] a
[10:00:21.688] ({root:{}})
于 2012-05-22T07:00:42.533 に答える
1

次のように、既存のコードをわずかに変更して使用できます。

Session.delete = function(key) {
    if (!window["_SESSION"] || typeof key == 'undefined') {
        return false;
    }
    if (key.indexOf('.') === -1) {
        if (key) {
            delete key;
            return true;
        }
    }

    var keyArr = key.split('.'), val = window["_SESSION"];

    var keyDepth = keyArr.length;
    for ( var i = 0; i < keyDepth-1; i++) {
        if (typeof val[keyDepth] === 'undefined') {
            return null;
        }
        val = val[keyDepth];
    }
    if (val[keyDepth-1]) {
        delete val[keyDepth-1];
        return true;
    }
    return false;
}
于 2012-05-22T07:27:27.807 に答える