javascript - 在嵌套对象数组中按属性路径查找对象

标签 javascript

我有这样的对象:

var obj = [
    {
      name: 'ob_1',
      childFields: [],
    },
    {
      name: 'ob_2',
      childFields: [
        {
          name: 'ob_2_1',
          childFields: [
            {
              name: 'ob_3_1',
              childFields: [],
              test: 124
            },
          ],
        },
      ],
    },
  ]

function getObjectByNamePath(path, fieds) {
    const pathArr = path.split('.');
    const result = fieds.find(field => {
      if (pathArr.length > 1) {
        if (field.name === pathArr[0] && field.childFields.length) {
          const newPath = pathArr.slice(1, pathArr.length).join('.');
          return getObjectByNamePath(newPath, field.childFields);
        }
        return false;
      } else {
        if (field.name === pathArr[0]) {
            return true;
        } else {
            return false;
        }
      }
    });
    return result;
  }

我想通过名称值路径获取对象:

console.log(getObjectByNamePath('ob_2.ob_2_1.ob_3_1', obj))

我试过了 this ,但它不能正常工作,我觉得有更优雅的方式来实现我想要的。谢谢。

最佳答案

您可以迭代 childFields 并找到该级别的 name,然后取下一个级别的名称。

function getObjectByNamePath(path, array) {
    return path
        .split('.')
        .reduce(
            ({ childFields = [] } = {}, name) => childFields.find(o => o.name === name),
            { childFields: array }
        );
}

var obj = [{ name: 'ob_1', childFields: [], }, { name: 'ob_2', childFields: [ { name: 'ob_2_1', childFields: [ { name: 'ob_3_1', childFields: [], test: 124 }] }] }];

console.log(getObjectByNamePath('ob_2.ob_2_1.ob_3_1', obj));
console.log(getObjectByNamePath('ob_1', obj));
console.log(getObjectByNamePath('foo.bar', obj));
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 在嵌套对象数组中按属性路径查找对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50605759/

相关文章:

javascript - Angular 2按钮点击动画

javascript - 将 uMap 导入 Leaflet

javascript - 在javascript中获取文件内容

javascript - 浏览 Node.js 服务器时出现 502(代理错误)

javascript - LastIndexOf 的作用是什么?

javascript - 在 ReactJS 中,为什么 `setState` 在同步调用时表现不同?

javascript - History.js window.onstatechange 不触发

javascript - 如何在不在 HTML 中对元素进行硬编码的情况下向元素添加属性?

javascript - GAPI 未定义

javascript - 通过从 json 创建的给定二维数组动态填充表