如何将对象键转换为嵌套对象

时间:2019-01-05 17:10:12

标签: javascript arrays reactjs object

我有这个对象:

public class ListCartItem {
    public List<CartItem> cartItems;
    public ListCartItem() {
        cartItems = new ArrayList<>();
    }
}

我要将上述对象转换为:

const sampleObj = { 
  home: true,
  products_edit: true,
  products_create: true,
  orders_delete: true,
  pages_category_create: true
}

所以我想根据const result = { home: { status: 'full' }, products: { status: 'limited', subOptions: { edit: true, create: true } }, orders: { status: 'limited', subOptions: { delete: true, } }, pages: { status: 'limited', subOptions: { category: { status: 'limited', subOptions: { create: true, } }, } } } 字符将对象键转换为嵌套对象,而_部分可能超过3。

如果密钥是“ Home”之类的部分,则状态应为“完整”,否则应为“受限”。

这是我当前的代码:

_

2 个答案:

答案 0 :(得分:3)

在特殊情况下,您可以采用空路径,以@NodeEntity public class ManagedList { @Id @GeneratedValue() private Long id; private String name; @Relationship(type = "CONTAINS") private List<ListElement> listElement; } @NodeEntity public class ListElement { @Id @GeneratedValue() private Long id; private int elementOrder; @Relationship(type = "CONTAINS", direction = Relationship.INCOMING) private ManagedList managedList; } 作为新值。

然后减少键并分配默认的新对象(如果不存在),并为每个循环返回{ status: 'full' }

最后分配值。

subOptions
function setValue(object, path, value) {
    var last = path.pop();

    if (!path.length) {
        value = { status: 'full' };
    }

    path.reduce(
        (o, k) => (o[k] = o[k] || { status: 'limited', subOptions: {} }).subOptions,
        object
    )[last] = value;
}

const
    values = { home: true, financials: true, products_edit: true, products_create: true, orders_delete: true, pages_category_create: true },
    result = {};

Object.entries(values).forEach(([k, v]) => setValue(result, k.split('_'), v));

console.log(result);

答案 1 :(得分:1)

这就是我会做的,可能可以优化。

Object.keys和Array#reduce的组合。

b