��权限没有,则隐藏 function forum_list_access_filter($forumlist, $gid, $allow = 'allowread') { global $grouplist; if (empty($forumlist)) return array(); if (1 == $gid) return $forumlist; $forumlist_filter = $forumlist; $group = $grouplist[$gid]; foreach ($forumlist_filter as $fid => $forum) { if (empty($forum['accesson']) && empty($group[$allow]) || !empty($forum['accesson']) && empty($forum['accesslist'][$gid][$allow])) { unset($forumlist_filter[$fid]); } unset($forumlist_filter[$fid]['accesslist']); } return $forumlist_filter; } function forum_filter_moduid($moduids) { $moduids = trim($moduids); if (empty($moduids)) return ''; $arr = explode(',', $moduids); $r = array(); foreach ($arr as $_uid) { $_uid = intval($_uid); $_user = user_read($_uid); if (empty($_user)) continue; if ($_user['gid'] > 4) continue; $r[] = $_uid; } return implode(',', $r); } function forum_safe_info($forum) { //unset($forum['moduids']); return $forum; } function forum_filter($forumlist) { foreach ($forumlist as &$val) { unset($val['brief'], $val['announcement'], $val['seo_title'], $val['seo_keywords'], $val['create_date_fmt'], $val['icon_url'], $val['modlist']); } return $forumlist; } function forum_format_url($forum) { global $conf; if (0 == $forum['category']) { // 列表URL $url = url('list-' . $forum['fid'], '', FALSE); } elseif (1 == $forum['category']) { // 频道 $url = url('category-' . $forum['fid'], '', FALSE); } elseif (2 == $forum['category']) { // 单页 $url = url('read-' . trim($forum['brief']), '', FALSE); } if ($conf['url_rewrite_on'] > 1 && $forum['well_alias']) { if (0 == $forum['category'] || 1 == $forum['category']) { $url = url($forum['well_alias'], '', FALSE); } elseif (2 == $forum['category']) { // 单页 $url = ($forum['threads'] && $forum['brief']) ? url($forum['well_alias'] . '-' . trim($forum['brief']), '', FALSE) : url($forum['well_alias'], '', FALSE); } } return $url; } function well_forum_alias() { $forumlist = forum_list_cache(); if (empty($forumlist)) return ''; $key = 'forum-alias'; static $cache = array(); if (isset($cache[$key])) return $cache[$key]; $cache[$key] = array(); foreach ($forumlist as $val) { if ($val['well_alias']) $cache[$key][$val['fid']] = $val['well_alias']; } return array_flip($cache[$key]); } function well_forum_alias_cache() { global $conf; $key = 'forum-alias-cache'; static $cache = array(); // 用静态变量只能在当前 request 生命周期缓存,跨进程需要再加一层缓存:redis/memcached/xcache/apc if (isset($cache[$key])) return $cache[$key]; if ('mysql' == $conf['cache']['type']) { $arr = well_forum_alias(); } else { $arr = cache_get($key); if (NULL === $arr) { $arr = well_forum_alias(); !empty($arr) AND cache_set($key, $arr); } } $cache[$key] = empty($arr) ? '' : $arr; return $cache[$key]; } ?>object - Preferred way of creating "dictionary of dictionaries" in JavaScript - Stack Overflow
最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

object - Preferred way of creating "dictionary of dictionaries" in JavaScript - Stack Overflow

programmeradmin3浏览0评论

Assume that I need a JavaScript dictionary (object/ associative array) which I need to access as follows:

var value = dict[foo][bar][buz][qux]; // this could go on

Which is the best way to initialize this dictionary? The only way I can think of is:

// 'foo', 'bar', 'baz', 'qux' are variables
var dict = {};
dict[foo] = {};
dict[foo][bar] = {};
dict[foo][bar][buz] = {};
dict[foo][bar][buz][qux] = value;

Alternatively, is there a better way of achieving the same results? I would prefer a solution that works both in browsers and Node.js.

Assume that I need a JavaScript dictionary (object/ associative array) which I need to access as follows:

var value = dict[foo][bar][buz][qux]; // this could go on

Which is the best way to initialize this dictionary? The only way I can think of is:

// 'foo', 'bar', 'baz', 'qux' are variables
var dict = {};
dict[foo] = {};
dict[foo][bar] = {};
dict[foo][bar][buz] = {};
dict[foo][bar][buz][qux] = value;

Alternatively, is there a better way of achieving the same results? I would prefer a solution that works both in browsers and Node.js.

Share Improve this question edited Apr 29, 2013 at 13:52 adrianp asked Apr 29, 2013 at 13:36 adrianpadrianp 2,5516 gold badges26 silver badges44 bronze badges
Add a ment  | 

3 Answers 3

Reset to default 2

An option is to build the object dynamically, like:

var vals = [1, 2, 3, 4];

function createObject(arr) {
    var obj = {};
    var mod = obj;
    for (var i = 0, j = arr.length; i < j; i++) {
        if (i === (j - 1)) {
            mod.value = arr[i];
        } else {
            mod[arr[i]] = {};
            mod = mod[arr[i]];
        }
    }
    return obj;
}

console.log(createObject(vals));

DEMO: http://jsfiddle/BnkPz/

So your list of variables would have to be put into an array and passed to the function, or the function could modified to work with any number of passed arguments.

Use JSON.parse:

var dict = JSON.parse('{ "' + foo + '": { "' + bar + '": { "' + buz + '": { "' + qux + '": "value"}}}}');

You could create a function that takes the object to modify, a path to the leaf property (a dot-delimited string like foo + '.' + bar + '.' + buz + '.' + qux), and the value, and let it loop and do the job for you:

var foo = 'foo',
    bar = 'bar',
    buz = 'buz',
    qux = 'qux',
    path = foo + '.' + bar + '.' + buz + '.' + qux,
    dict = {};

createNestedProperty(dict, path, 10);
console.log(dict);

function createNestedProperty(dict, path, value) {
    var pathArray = path.split('.'),
        current;
    while(pathArray.length) {
        current = pathArray.shift();
        if(!dict.hasOwnProperty(current)) {
            if(pathArray.length) {
                dict[current] = {};  
            // last item
            } else {
                dict[current] = value;     
            }
        }
    }
}

http://jsfiddle/NuqtM/

Also, a similar question was asked here: Extend a JavaScript object by passing a string with the path and a value.

发布评论

评论列表(0)

  1. 暂无评论