如何制作 List<List<List<String>>> 基于两个 List<Map> dart
How to make List<List<List<String>>> based on two List<Map> dart
我有一个 List<Map>
键值:
"column-data": [
{
"label": "Title",
"align": "right",
"width": 50,
},
{
"label": "Description",
"align": "left",
"width": 100,
}
],
我还有一个 List<Map>
:
"row-data": [
{
"title": "Subscription #1",
"description": "Lorem ipsum dolar set amit."
},
{
"title": "Subscription #2",
"description": "Lorem ipsum dolar set amit."
}
]
我的问题是如何在 label
和 row-data
键值的基础上将 column-data
中的键值 align
和 width
添加到 List<List<List<String>>>
。我想为每个 row-data
添加来自 column-data
的元数据,如下例所示:
"row-data" : [
[
["Subscription #1", "right", "50"],
["Lorem ipsum dolar set amit.","left", "100"]
],
[
["Subscription #2", "right", "50"],
["Lorem ipsum dolar set amit.","left", "100"]
]
];
编辑
实际上 column-data
的地图中的 align
或 width
可能不存在。有没有办法解决这个问题? –
title
、description
、Title
和 Description
是动态的,因此可以有不同的键和键值名称。有没有办法不指定这些键和值?
您可以执行基本构成 sql 连接的操作,将每个行项目的条目连接到不同的列并构建您的列表。
const columnData = [
{
"label": "Title",
"align": "right",
"width": 50,
},
{
"label": "Description",
"align": "left",
"width": 100,
}
];
const rowData = [
{
"title": "Subscription #1",
"description": "Lorem ipsum dolar set amit."
},
{
"title": "Subscription #2",
"description": "Lorem ipsum dolar set amit.",
"something": "or other"
}
];
final newRowData = rowData.map(
(r) => r.entries.map(
(re) {
final col = columnData.firstWhere(
(c) => re.key.toUpperCase() == (c['label'] as String).toUpperCase(),
orElse: () => {}
);
return [re.value, ...[
for (final ce in col.entries)
if (ce.key != 'label')
ce.value.toString()
]];
}
).toList()
).toList();
您没有显示任何列匹配时会发生什么的示例,因此这只会省略这些部分。
[
[
["Subscription #1", "right", "50"],
["Lorem ipsum dolar set amit.", "left", "100"]
],
[
["Subscription #2", "right", "50"],
["Lorem ipsum dolar set amit.", "left", "100"],
["or other"]
]
]
我有一个 List<Map>
键值:
"column-data": [
{
"label": "Title",
"align": "right",
"width": 50,
},
{
"label": "Description",
"align": "left",
"width": 100,
}
],
我还有一个 List<Map>
:
"row-data": [
{
"title": "Subscription #1",
"description": "Lorem ipsum dolar set amit."
},
{
"title": "Subscription #2",
"description": "Lorem ipsum dolar set amit."
}
]
我的问题是如何在 label
和 row-data
键值的基础上将 column-data
中的键值 align
和 width
添加到 List<List<List<String>>>
。我想为每个 row-data
添加来自 column-data
的元数据,如下例所示:
"row-data" : [
[
["Subscription #1", "right", "50"],
["Lorem ipsum dolar set amit.","left", "100"]
],
[
["Subscription #2", "right", "50"],
["Lorem ipsum dolar set amit.","left", "100"]
]
];
编辑
实际上 column-data
的地图中的 align
或 width
可能不存在。有没有办法解决这个问题? –
title
、description
、Title
和 Description
是动态的,因此可以有不同的键和键值名称。有没有办法不指定这些键和值?
您可以执行基本构成 sql 连接的操作,将每个行项目的条目连接到不同的列并构建您的列表。
const columnData = [
{
"label": "Title",
"align": "right",
"width": 50,
},
{
"label": "Description",
"align": "left",
"width": 100,
}
];
const rowData = [
{
"title": "Subscription #1",
"description": "Lorem ipsum dolar set amit."
},
{
"title": "Subscription #2",
"description": "Lorem ipsum dolar set amit.",
"something": "or other"
}
];
final newRowData = rowData.map(
(r) => r.entries.map(
(re) {
final col = columnData.firstWhere(
(c) => re.key.toUpperCase() == (c['label'] as String).toUpperCase(),
orElse: () => {}
);
return [re.value, ...[
for (final ce in col.entries)
if (ce.key != 'label')
ce.value.toString()
]];
}
).toList()
).toList();
您没有显示任何列匹配时会发生什么的示例,因此这只会省略这些部分。
[
[
["Subscription #1", "right", "50"],
["Lorem ipsum dolar set amit.", "left", "100"]
],
[
["Subscription #2", "right", "50"],
["Lorem ipsum dolar set amit.", "left", "100"],
["or other"]
]
]