首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将不同长度的数组转换为javascript中的嵌套对象树

如何将不同长度的数组转换为javascript中的嵌套对象树
EN

Stack Overflow用户
提问于 2022-02-16 17:53:37
回答 1查看 66关注 0票数 1

我需要处理结构类似的文件

代码语言:javascript
运行
复制
Title
/foo/bar/foo/bar 1
/foo/bar/bar 2
/bar/foo 3
/bar/foo/bar 4

通过在每个/和\n处拆分,可以很容易地将其解析为数组数组。然而,一旦我得到一个数组,我就无法找到将其转换为嵌套对象的好方法。所需格式:

代码语言:javascript
运行
复制
{
  Title,
  {
    foo: {
      bar: {
        foo: {
          bar: 1
        },
        bar: 2
      }
    },
    bar: {
      foo: {
        3,
        bar: 4
      }
    }
  }
}

这似乎是一个超级常见的事情做,所以我完全不明白为什么我找不到任何预先存在的解决方案。我希望javascript甚至有一个本机函数,但是合并对象显然会重写值,而不是在默认情况下创建嵌套对象。我试过以下方法,使用jQuery.extend(),但实际上它并没有结合类似的术语(即父母和外祖父母)。

代码语言:javascript
运行
复制
let array = fileContents.split('\n');
let object = array.map(function(string) {
  const result = string.split('/').reduceRight((all, item) => ({
    [item]: all
  }), {});
  return result;
});

output = $.extend(true, object);
console.log(JSON.stringify(output));

这就把数组变成了嵌套的对象,但是没有合并.我可以强行这样做,但我的实际问题有2000多行,有5层深(/foo/foo值值),实际上有一系列空格分隔的值,而不是每行一个值。我愿意像对待字符串一样对待值数组,只是假装它不是数组,但是最好至少正确地嵌套对象,而不编写一个庞大的/原始的算法。

因为这本质上就是子目录的组织方式,所以这看起来应该很容易。有没有一个相对简单的解决方案我没有看到?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-16 18:08:16

您可以减少键/值的数组,并使用所有键设置值。

如果没有提供密钥,则使用这些密钥。

代码语言:javascript
运行
复制
const
    setValue = (target, keys, value) => {
        const last = keys.pop();
        keys.reduce((o, k) => o[k] ??= {}, target)[last] = value;
        return target;
    },
    data = 'Title\n/foo/bar/foo/bar 1\n/foo/bar/bar 2\n/bar/foo 3\n/bar/foo/bar 4',
    result = data
        .split(/\n/)
        .reduce((r, line) => {
            const [keys, value] = line.split(' ');
            return setValue(r, keys.split('/').filter(Boolean), value || keys);
        }, {});

console.log(result);
代码语言:javascript
运行
复制
.as-console-wrapper { max-height: 100% !important; top: 0; }

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

https://stackoverflow.com/questions/71146888

复制
相关文章

相似问题

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