我有这个对象:
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”之类的部分,则状态应为“完整”,否则应为“受限”。
这是我当前的代码:
_
答案 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