Javascript 如何使用映射传递动态字段集的字段数组
下面的回答代码: 在互联网上,我看到了一些功能,这些功能可以帮助我找到我需要的东西。然而,我正在努力使它更有活力 原始阵列:Javascript 如何使用映射传递动态字段集的字段数组,javascript,arrays,Javascript,Arrays,下面的回答代码: 在互联网上,我看到了一些功能,这些功能可以帮助我找到我需要的东西。然而,我正在努力使它更有活力 原始阵列: [ { Id: 1, Field1: 'Value10', Field2: 'Value20', LastSaveDate: 'xxx', LastSaveUserId: 2, Field3: 'Value30' }, { Id: 2, Field1: 'Value11', Field2: 'Value21', LastSaveDate: 'xxx', LastS
[
{ Id: 1, Field1: 'Value10', Field2: 'Value20', LastSaveDate: 'xxx', LastSaveUserId: 2, Field3: 'Value30' },
{ Id: 2, Field1: 'Value11', Field2: 'Value21', LastSaveDate: 'xxx', LastSaveUserId: 2, Field3: 'Value31' },
{ Id: 3, Field1: 'Value12', Field2: 'Value22', LastSaveDate: 'xxx', LastSaveUserId: 2, Field3: 'Value32' }
]
因此,下面的代码将获取一组常量字段,并将它们从输出数组中删除
const dataSet = items.map(({ Id, LastSaveDate, LastSaveUserId, ...item }) => item);
将返回:
[
{ Field1: 'Value10', Field2: 'Value20', Field3: 'Value30' },
{ Field1: 'Value11', Field2: 'Value21', Field3: 'Value31' },
{ Field1: 'Value12', Field2: 'Value22', Field3: 'Value32' }
]
这很好,但是,我希望将映射的Id、LastSaveDate、LastSAveUserId
部分作为数组、对象或动态对象传递,这样我就可以从中生成一个更有用的函数,如下所示:
exportToCSV(items, fileName, discardedFields) {
...
const dataSet = items.map(({ discardFields, ...item }) => ({ item }));
...
}
ExportToCSV(items, 'Sites', ['AnotherField', 'ThisField']);
回答
在下面@Felix Kling的基础上进行扩展,下面是我现在所拥有的有效工具。我还添加了一些字段,这些字段在许多(如果不是所有)可导出数据集中都是常量
removeFieldsFromObject(obj, fields) {
const commonRemovals = ['Id', 'LastSaveDate', 'MapData','LastSaveUserId'];
const removals = new Set([...fields, ...commonRemovals]);
return Object.fromEntries(
Object.entries(obj).filter(([field]) => !removals.has(field)),
);
},
exportToCSV(items, fileName, discardFields) {
...
dataSet.forEach((item, index) => {
dataSet[index] = this.removeFieldsFromObject(item, discardFields);
});
... // dataSet now has only the desired fields to export
},
调用此方法的过程如下所示:
exportToCSV(items, fileName, discardedFields) {
...
const dataSet = items.map(({ discardFields, ...item }) => ({ item }));
...
}
ExportToCSV(items, 'Sites', ['AnotherField', 'ThisField']);
因此,最终的数组永远不会包含以下字段:
Id、LastSaveDate、MapData、LastSaveUserId、AnotherField、ThisField
创建另一个助手函数,通过简单地在数组上迭代并创建一个新对象来选择(或丢弃)字段:
function discard(obj, fields) {
const result = {};
fields = new Set(fields);
for (const field of Object.keys(obj)) {
if (!fields.has(field)) {
result[field] = obj[field];
}
}
return result;
}
或更“实用”:
我对它进行了一些扩展,但你让我明白了@Felix Kling