javascript - 如何将对象深层属性转换为另一个?

标签 javascript

以下是一个深度嵌套的对象,其属性重复出现。

如何转换以下深度嵌套的对象

const obj = {
    prop1: {
        properties: { value: {} },
    },
    prop2: {
        properties: { subProp: { properties: { value: {} } } },
    },
    prop3: {
        properties: { subProp: { properties: { subSubProp: { properties: { value: {} } } } } },
    },
};

进入这个:
const obj = {
    prop1: { value: {} },
    prop2: { subProp: { value: {} } },
    prop3: { subProp: { subSubProp: { value: {} } } },
};

//if properties exists, else leave as it is (in each level)

最佳答案

您可以构建新对象并检查该值是否为对象以及 properties存在。然后采取properties或递归调用的对象。

const
    removeProperties = object => Object.fromEntries(Object
        .entries(object)
        .map(([key, value]) => [
            key,
            value && typeof value === 'object'
                ? removeProperties('properties' in value ? value.properties : value)
                : value
        ])
    ),
    obj = { prop1: { properties: { value: {} } }, prop2: { properties: { subProp: { properties: { value: {} } } } }, prop3: { properties: { subProp: { properties: { subSubProp: { properties: { value: {} } } } } } } };

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


没有 Object.fromEntries

const
    removeProperties = object => Object
        .entries(object)
        .map(([key, value]) => [
            key,
            value && typeof value === 'object'
                ? removeProperties('properties' in value ? value.properties : value)
                : value
        ])
        .reduce((object, [key, value]) => ({ ...object, [key]: value }), {}),
    obj = { prop1: { properties: { value: {} } }, prop2: { properties: { subProp: { properties: { value: {} } } } }, prop3: { properties: { subProp: { properties: { subSubProp: { properties: { value: {} } } } } } } };

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

关于javascript - 如何将对象深层属性转换为另一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62357525/

相关文章:

javascript - javascript 中 python 的 _ 是什么?

javascript - Node.js 中的 Promise Bluebird 出现问题

javascript - 在我的 Angular 应用程序的路由启动之前,如何执行 AJAX 请求?

javascript - 使用 ESC 键 HTML 提交表单

javascript - Angular 路由,包括身份验证防护和重定向

javascript - 测试时将 Meteor.userId 传递给经过验证的方法

javascript - 使用 Object.assign 更新对象后,在数组上调用 Push 方法会崩溃

javascript - window.name在IE中的作用范围是什么?

javascript - 为什么不显示在 Nodejs 和 mongoose 中创建的任何集合

javascript - 谷歌地图后面的整页背景图像不会出现在 html 输出中