我有一个对象数据,其属性如“名称”,“日期”等
const data = {
"name":{
"columnName":"name",
"columnType":"name of employee",
"values":[
"sam", "son"
],
"range":{
"min":0,
"max":0
}
},
"date":{
"columnName":"date",
"columnType":"date input",
"categoricalValues":[
],
"range":{
"min":0,
"max":0
}
},
"fare":{
"columnName":"fare",
"columnType":"fare indication",
"values":[
"false",
"true"
],
"range":{
"min":0,
"max":0
}
},
"id":{
"columnName":"id",
"columnType":"id employee",
"values":[
],
"range":{
"min":0,
"max":0
}
}
}
另一个对象categoricalColumns具有一些属性,该属性包含一个数组,其中指定了先前对象的所有属性名称
const categoricalColumns =
{
"Charges" : ["name" , "fare"],
"Location" : ["date", "address" ]
}
如果对象数据的属性,比如说“名称”和“耀斑”存在于categoricalColumns “ charges”内,则需要以这种格式重新构造categoricalcolumn对象
{
"title" : "Charges",
"children" : [
{
"name":{
"columnName":"name",
"columnType":"name of employee",
"values":[
"sam", "son"
],
"range":{
"min":0,
"max":0
}
}
},
{
"fare":{
"columnName":"fare",
"columnType":"fare indication",
"values":[
"false",
"true"
],
"range":{
"min":0,
"max":0
}
}
}
]
}
预期结果 :
const result = [
{
"title" : "Charges",
"children" : [
{
"name":{
"columnName":"name",
"columnType":"name of employee",
"values":[
"sam", "son"
],
"range":{
"min":0,
"max":0
}
}
},
{
"fare":{
"columnName":"fare",
"columnType":"fare indication",
"values":[
"false",
"true"
],
"range":{
"min":0,
"max":0
}
}
}
]
},
{
"title" : "Location",
"children" : [
{
"date":{
"columnName":"date",
"columnType":"date input",
"categoricalValues":[
],
"range":{
"min":0,
"max":0
}
}
}
]
},
{
title : "Others",
"children" : [
{
"id":{
"columnName":"id",
"columnType":"id employee",
"values":[
],
"range":{
"min":0,
"max":0
}
}
}
]
}
]
如果数据的某些属性与任何categoricalColumns不匹配,则必须位于“ Others”属性的子级中。
您可以选择Set
并删除访问过的列。
function restructure(data, categories) {
var others = new Set(Object.keys(data));
return Object
.entries(categories)
.reduce((r, [title, category]) => {
var children = category.filter(k => k in data).map(k => ({ [k]: data[k] }));
if (children.length) r.push({ title, children });
category.forEach(Set.prototype.delete, others);
return r;
}, [])
.concat(others.size
? { title: 'Others', children: Array.from(others, k => ({ [k]: data[k] })) }
: []
);
}
var data = { name: { columnName: "name", columnType: "name of employee", values: ["sam", "son"], range: { min: 0, max: 0 } }, date: { columnName: "date", columnType: "date input", categoricalValues: [], range: { min: 0, max: 0 } }, fare: { columnName: "fare", columnType: "fare indication", values: ["false", "true"], range: { min: 0, max: 0 } }, id: { columnName: "id", columnType: "id employee", values: [], range: { min: 0, max: 0 } } },
categoricalColumns = { Charges: ["name", "fare"], Location: ["date", "address"] },
result = restructure(data, categoricalColumns);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句