javascript - 使用命名空间/键搜索对象

标签 javascript object namespaces

我正在尝试编写一个可以在 JavaScript 对象中查找命名空间和值并返回键的函数。

图像数据:

var o = {

    map: {
        lat : -33.86749,
        lng : 151.20699,
        zoom : 12
    },

    filters : {
        animals : {
            dogs: {
                myDog : 'fido'
            }
        }
    }
};

function get(namespace, key){
    //TODO
}

get('filters.animals.dogs', 'myDog')

无论 namespace 的深度如何,您将如何构建动态执行此操作的函数?

这个函数有点接近,只是它修改了我们当然不想要的原始对象:

var get = function(obj, namespace, key, value) {

    var parts = namespace.split('.');

    for(var i = 0; i < parts.length; i++) {
        if(typeof obj[parts[i]] == 'undefined'){
            obj[parts[i]] = {};
        }

        obj = obj[parts[i]];
    }

    return obj[key] = value;
};

疯狂的原因是我无法公开该对象。它必须保持私有(private),并且公共(public)方法必须输出结果。

最佳答案

试一试。

function get(namespace, key) {
    var parts = namespace.split('.'),
        i = 0,
        l = parts.length,
        obj = o;
    while ( i < l ) {
        obj = obj[parts[i]];
        if ( ! obj ) break;
        i++; 
    }
    return obj && obj[key] ? obj[key] : null;
}

关于javascript - 使用命名空间/键搜索对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17519495/

相关文章:

javascript - 如何让 jQuery 在上传时限制文件类型?

javascript - 如果没有 "link_to"类助手,我如何调用 ajax?

C++ 问题 : Cannot allocate an object of abstract type, 但为什么呢?

python - 为什么函数可以改变外部的对象?

clojure - 命名空间映射命名空间上的多方法调度

javascript - 要求 div 展开以包含比页面宽度更大的内容

php - 在文本中保存光标高亮位置

c# - View 在从区域中移除后未被处置

javascript - 如何使用 Javascript 在 Illustrator CC 中对文档中的所有对象进行分组?

c++ - C++ 命名空间内的外部 "C"链接?