javascript - 如何通过对象数组中对象的属性删除重复项并复制重复项的所有属性?
问题描述
我通过对象数组中对象的“sourceType”属性删除了所有重复项,但我无法将“dataType”属性从重复项复制到原始项,请检查我在输出和预期输出中的期望
const datasources = [ "sourceType2 /4 (Metric) Custom", "sourceType2 /4 (Datamap) Custom", "sourceType2 /4 (Event) Custom", "sourceType2 /4 (All) Custom", "sourceTYpe3 /4 (Metric) Custom", "sourceTYpe3 /4 (Datamap) Custom", "sourceTYpe3 /4 (Event) Custom" ]
function transformDataSources(datasource) {
const transformation = datasource.map(str => ({
sourceType: str.substr(0, str.indexOf("/")).split(" ").join(""),
policyReferences: [{
dataType: (str.match(/\((.*)\)/).pop().split(" ").join(""))
}]
})).filter((item, index, array) => array.map(mapItem => mapItem.sourceType)
.indexOf(item.sourceType) === index)
console.log(transformation)
}
transformDataSources(datasources)
输出:
[{
policyReferences: [{
dataType: "Metric"
}],
sourceType: "sourceType2"
}, {
policyReferences: [{
dataType: "Metric"
}],
sourceType: "sourceTYpe3"
}]
预期输出:
[{
policyReferences: [
{
dataType: "Metric"
},
{
dataType: "Datamap"
},
{
dataType: "All"
},
{
dataType: "Event"
}
],
sourceType: "sourceType2"
}, {
policyReferences: [
{
dataType: "Metric"
},
{
dataType: "Event"
},
{
dataType: "Datamap"
},
],
sourceType: "sourceTYpe3"
}]
解决方案
您需要对项目进行分组sourceType
并为每个组收集dataType
。
function transformDataSources(data) {
return Object.values(data.reduce((r, s) => {
const
sourceType = s.match(/^[^\/]+/)[0],
dataType = s.match(/\((.*)\)/)[1];
r[sourceType] ??= { sourceType, policyReferences: [] };
r[sourceType].policyReferences.push({ dataType });
return r;
}, {}));
}
const datasources = ["sourceType2 /4 (Metric) Custom", "sourceType2 /4 (Datamap) Custom", "sourceType2 /4 (Event) Custom", "sourceType2 /4 (All) Custom", "sourceTYpe3 /4 (Metric) Custom", "sourceTYpe3 /4 (Datamap) Custom", "sourceTYpe3 /4 (Event) Custom"]
console.log(transformDataSources(datasources));
推荐阅读
- mysql - 使用 MYSQL 查询设置 Group_CONCAT 大小
- haskell - Haskell - 递归从最后一项开始
- python - 打印函数或 lambda
- ruby-on-rails - 如何在嵌入式 Docusign 签名期间保持会话
- flutter - 如何在拖动容器时在颤动中设置容器的(最小和最大)顶部位置
- c# - 不可实例化的密封类中可能出现 NullReferenceException
- reactjs - 这在 React 中意味着什么?
- java - 为什么在 Jtable 设置中可调整大小和可编辑为全部真实,即使我在定制器对话框中取消了它们全部?
- reactjs - 为什么 REactsetState 在第一次点击时不起作用?
- c# - 为什么 Razor 页面无法访问子列表?