【问题标题】:How to remove duplicates by property of an object in an array of objects and copy all properties of duplicates?如何通过对象数组中对象的属性删除重复项并复制重复项的所有属性?
【发布时间】:2021-03-23 08:47:29
【问题描述】:

我通过对象数组中对象的“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"
}]

【问题讨论】:

  • 试过调试了吗?您的见解是什么?

标签: javascript arrays algorithm


【解决方案1】:

您需要按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));

【讨论】:

  • 嗨,Nina,你能告诉我一个学习正则表达式的好资源吗?我觉得这是最难也是最强大的东西。
  • @ManasKhandelwal,您可以使用regex101.com 之类的网站并使用它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-06
  • 2019-12-12
  • 1970-01-01
  • 2012-05-17
  • 2020-06-29
  • 1970-01-01
  • 2015-12-14
相关资源
最近更新 更多