我想返回一个只包含通过数组传递的键的对象,

const arr = ['a', 'b', 'c', 'd', 'e']

还有一个物体,

const obj = {
    a: {
        name: 'a',
        capital: 'A'
    },
    g: {
        name: 'g',
        capital: 'G'
    },
    b: {
        name: 'b',
        capital: 'B'
    },
    m: {
        c: {
            name: 'c',
            capital: 'C'
        }
    },
    z: {
        name: 'z',
        capital: 'Z'
    },
    n: {
        e: {
            name: 'e',
            capital: 'E'
        }
    },
    o: {
      f: {
        d: {
          name: 'd',
          capital: 'D'
        }
      }
    }
}

现在我想返回一个对象,它只包含arr'a', 'b', 'c', 'd' and 'e'中的键,所以我的结果对象是,

{
    a: {
        name: 'a',
        capital: 'A'
    },
    b: {
        name: 'b',
        capital: 'B'
    },
    c: {
        name: 'c',
        capital: 'C'
    },
    e: {
        name: 'e',
        capital: 'E'
    },
    d: {
        name: 'd',
        capital: 'D'
    }

}

Approach:

我正在接近它,如下所示,但没有得到预期的结果,

function fetchValueByKey(object, key, result) {
  if(typeof object !== 'object')
    return result;
  for(let objKey in object) {
    if(key.indexOf(objKey) > -1) {
      result[objKey] = object[objKey];
      console.log(result);
    } else {
      result[objKey] = fetchValueByKey(object[objKey], key, result);
      console.log(result)
    }
  }
}

console.log(fetchValueByKey(obj, arr, {}));

请建议我如何做到这一点?

推荐答案

你可以得到平面和过滤条目,然后构建一个对象.

const
    getFlatFilteredEntries = object => Object
        .entries(object)
        .flatMap(([k, v]) => 'name' in v // or other indicator of leaf object
            ? keys.includes(k)
                ? [[k, v]]
                : []
            : getFlatFilteredEntries(v)
        ),
    keys = ['a', 'b', 'c', 'd', 'e'],
    object = { a: { name: 'a', capital: 'A' }, g: { name: 'g', capital: 'G' }, b: { name: 'b', capital: 'B' }, m: { c: { name: 'c', capital: 'C' } }, z: { name: 'z', capital: 'Z' }, n: { e: { name: 'e', capital: 'E' } }, o: { f: { d: { name: 'd', capital: 'D' } } } },
    result = Object.fromEntries(getFlatFilteredEntries(object));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

Javascript相关问答推荐

无法访问Vue 3深度监视器中对象数组的特定对象值'

如何在输入元素中附加一个属性为checkbox?

ChartJs未呈现

如何在Press上重新启动EXPO-AV视频?

将嵌套数组的元素乘以其深度,输出一个和

构建器模式与参数对象输入

在高位图中显示每个y轴系列的多个值

如何在Highlihte.js代码区旁边添加行号?

使用Perl Selify::Remote::Driver执行Java脚本时出错

有没有办法在R中创建一张具有多个色标的热图?

输入数据覆盖JSON文件

使用python,我如何判断一个html复选框是否被隐藏,以及它是否被S选中?

由于http.get,*ngIf的延迟很大

Node.js的Fetch()调用总是创建新的Express会话

此上下文在JavaScript中

查找函数句柄的模块/文件

无法访问受保护的资源,即使成功登录后(Passport oauth2.0谷歌登录)

onmouseover事件在Edge浏览器中突然不起作用

我如何判断css@layer是否在css和Javascript中受支持?

解析JS中的UK格式日期字符串