【问题标题】:Obj iteration dynamically - javascriptObj 动态迭代 - javascript
【发布时间】:2018-12-13 11:32:45
【问题描述】:

我有一个需要迭代的 json 对象,我可以将迭代作为一个函数使用,但想看看是否有更简单的方法。 对象如下图:

obj = [
  {
    name: 'FolderA',
    child: [
      {
        name: 'FolderB',
        child: [
           {
            name: 'FolderC0',
            child: [],
          },
          {
            name: 'FolderC1',
            child: [],
          }
         ]
       }
   ],
 },
 {
    name: 'FolderM'
    child: []
 }
]

在某些事件中我会升级,例如

level = "0-0-1"

我拆分得到 [0, 0, 1] 含义,第 0 个索引,嵌套的第 0 个索引和进一步嵌套的第 1 个索引,我得到这样的:

obj[0][0][1], 

但由于嵌套结构深度未知,我希望动态生成上述内容,如下所示:

obj + [0] + .children[0] + .children[1], 

不确定这是否可以做到,但如果有,请告诉我,否则我将不得不使用递归函数。谢谢

【问题讨论】:

  • 你应该使用递归迭代嵌套对象。
  • 旁注:JSON 是对象的字符串表示形式。你所拥有的是对象本身,而不是它的字符串表示。所以请说“object”而不是“json object”;不要用json标记它。

标签: javascript json iteration


【解决方案1】:

您可以拆分字符串,然后在索引数组上使用 reduce:

const arr = [
  {
    name: 'FolderA',
    child: [
      {
        name: 'FolderB',
        child: [
          {
            name: 'FolderC0',
            child: [],
          },
          {
            name: 'FolderC1',
            child: [],
          },
        ],
      },
    ],
  },
  {
    name: 'FolderM',
    child: [],
  },
];
const getObject = (arr, path) =>
  path
    .split('-')
    .reduce((result, key) => result.child[key], {
      child: arr,
    });

console.log(getObject(arr, '0-0-1'));

【讨论】:

  • 魅力!!谢谢。
  • 你能给我一个资源链接来学习高级javascript吗?
  • @MichaelPhilips documentation here 在处理数组时很有用(reduce 也在那里)。不错的读物是 YDKJS 系列,但this one 会让你熟悉 ES6 语法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-07
  • 2010-09-08
  • 2022-01-06
  • 1970-01-01
相关资源
最近更新 更多