[英]creating nested object and arrays from array of data
var resources = ["user$manageuser", "user$createuser", "details$/user-details-data", "page1$user$deletesupplier"] var result = resources.reduce( (r, s) => ((key, value) => Object.assign(r, { [key]: [].concat(r[key] || [], value) })) (...s.split('$')), {} ); console.log(result);
無法嵌套page1的級別,該怎么辦?
expectedoutput = {
user: ["manageuser", "createuser"],
details: ["/user-details-data"],
page1: {
user: ["deletesupplier"]
}
}
你必須使用遞歸
const data = ["user$manageuser", "user$createuser", "details$/user-details-data", "page1$user$deletesupplier"] function makeObject(resources, object = {}) { return resources.reduce((result, string) => { const [key, value] = string.split(/\\$(.+)/) if (value && value.includes('$')) { result[key] = result[key] || {} makeObject([value], result[key]) } else { result[key] = result[key] || [] result[key].push(value) } return result }, object) } const res = makeObject(data) console.log(res)
這適用於任何深度,也可以將對象添加到數組,例如。 "user$test$test2"
如果您可以使用Lodash或至少從該庫中獲取和設置,則可以解決問題的函數如下所示:
function transform(resources) {
return resources.reduce((agg, resource) => {
const splitted = resource.split('$');
const keys = splitted.slice(0, splitted.length - 1);
const value = splitted[splitted.length - 1];
_.set(agg, keys, [...(_.get(agg, keys) || []), value]);
return agg;
}, {});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.