首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将对象转换为关联数组?

如何将对象转换为关联数组?
EN

Stack Overflow用户
提问于 2014-09-04 13:03:46
回答 2查看 63关注 0票数 1

我有javascript对象,如

代码语言:javascript
运行
复制
var obj = {
    param1 : {
        subParam1: 10,
        subParam2: 20
    },
    param2: 123
}

如果需要将其转换为仅在根目录中使用键的对象

代码语言:javascript
运行
复制
obj = {
    'param1.subParam1' : 10,
    'param1.subParam2' : 20,
    'param2' : 123
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-04 13:15:56

您可以为此编写一个简单的递归函数:

代码语言:javascript
运行
复制
function flatten(obj) {

    var result = {},
        temp, key, subkey;

    for (key in obj) {
        if (obj.hasOwnProperty(key)) {
            if (Object.prototype.toString.call(obj[key]) == '[object Object]') {
                temp = flatten(obj[key]);
                for (subkey in temp) {
                    result[key + '.' + subkey] = temp[subkey];
                }
            }
            else result[key] = obj[key];
        }
    }

    return result;
}

它看起来像预期的那样工作:

代码语言:javascript
运行
复制
{param1.subParam1: 10, param1.subParam2: 20, param2: 123}
票数 2
EN

Stack Overflow用户

发布于 2014-09-04 13:27:18

有些人可能称其为致密,有些人可能称其为紧凑,有些人可能称其为模糊,有些人可能称其为优雅。

代码语言:javascript
运行
复制
function flatten_object_into_dot_notation(obj) {

    return function _flatten(obj, prefix, result) {

        return Object.keys(obj).reduce(function(_, key) {
            var val = obj[key];
            key = prefix + key;

            if (val && typeof val==='object') { _flatten(val, key + '.', result); } 
            else { result[key] = val; }

            return result;
        }, result);

    }(obj, '', {});

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25666286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档