【发布时间】:2020-03-27 07:49:05
【问题描述】:
我有一个 Excel 文件如下:
[["Country", "City", "Zip"], ["CNTR1", "CT1", 101], ["CNTR1", "CT2", 102], ["CNTR2", "CT3", 103]]
以上是Excel 4行的二维数组解释。我想从上面得到以下对象:
{
level1: "Country",
items: [{
"CNTR1": {
level2: "City",
items: [{
"CT1": {
level3: "Zip",
items: [
"101"
]
}
}, {
"CT2": {
level3: "Zip",
items: [
"102"
]
}
}]
}
}, {
"CNTR2": {
level2: "City",
items: [{
"CT3": {
level3: "Zip",
items: [
"103"
]
}
}]
}
}]
}
主要目的是有一个层次结构,因为上面的 Excel 应该有一个从左到右的依赖关系,因为这些值将在依赖下拉列表中使用(所以如果我们有国家“CNTR1”,所有城市和邮政编码应该是其对象的一部分,因为在国家下拉列表中选择“CNTR1”后,只有 CT1 和 CT2 应该显示在城市下拉列表中,以此类推邮政编码),并且基于这种依赖关系,我们应该有每个的子值嵌套级别。此外,上述内容不应仅限于三层深度,因此应该使用 reducers/recursive 解决方案。
如果有人有更好的对象模式解决方案,因为我认为以上内容既符合依赖下拉列表的目的,同时也检索列名,请随时分享。下拉列表将是动态的,依赖于从左到右的列,并且值基于相同的“更高”层次结构值。
希望它足够清楚。
到目前为止,我有:
items.map(row => row.reduceRight((value, key) => ({[key]: value}))).reduce((acc, value) => (Object.assign(acc, value)))
但是这个只是给出类型的结果:
{
"CNTR1": {
"CT2": 102
},
"CNTR2": {
"CT3": 103
}
}
(忽略嵌套属性数据的丢失,因为合并不深)列的名称不包括在内,对于指定的目的,数据结构似乎有点差。
谢谢
【问题讨论】:
标签: javascript arrays json reactjs javascript-objects