Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript (Un)通过字符串输入设置嵌套数组值_Javascript_Arrays_Function_Session_Reference - Fatal编程技术网

Javascript (Un)通过字符串输入设置嵌套数组值

Javascript (Un)通过字符串输入设置嵌套数组值,javascript,arrays,function,session,reference,Javascript,Arrays,Function,Session,Reference,我有这样一个函数: Session.get = function(key) { if (!window["_SESSION"] || typeof key == 'undefined') { return window["_SESSION"] || {}; } if (key.indexOf('.') === -1) { return window["_SESSION"][key] || {}; } var keyArr

我有这样一个函数:

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;
}
[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:{}})
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;
}
Session.get=函数(键){
如果(!window[“_SESSION”]| | typeof key=='未定义'){
返回窗口[“_SESSION”]|{};
}
if(key.indexOf('.')=-1){
返回窗口[“_SESSION”][key]|{};
}
var-keyArr=key.split('.'),val=window[“_SESSION”];
对于(变量i=0;i
此函数允许我获取嵌套值,而不需要函数外部的临时变量。示例
Session.get('var.nestedvar')
返回
window[\u Session']['var']['nestedvar']
的值


Bat我怎样才能(取消)设置这样的变量?试图
删除val但不起作用。。javascript引用是如何工作的?有人知道实现类似功能的替代方案吗?

您可以按如下方式由家长删除:

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;
}
[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:{}})
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;
}

您可以对现有代码稍作修改,如下所示:

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;
}
[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:{}})
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;
}
Session.delete=函数(键){
如果(!window[“_SESSION”]| | typeof key=='未定义'){
返回false;
}
if(key.indexOf('.')=-1){
如果(关键){
删除密钥;
返回true;
}
}
var-keyArr=key.split('.'),val=window[“_SESSION”];
var keyDepth=keyArr.length;
对于(var i=0;i
您可以在一个变量中设置
keyArr.length-1
,因为现在您要在循环的每个迭代中再计算两次。正如我所需要的,但core1024是第一个,所以+1:)