首页 > 解决方案 > 转换和过滤动态 JSON 返回的对象

问题描述

我不知道如何实现这一点,

我有这个对象,它是一个返回的 JSON:

[
    { first_dynamic_property: 'something', second_dynamic_property: 'something else' },
    { first_dynamic_property: 'something 2', second_dynamic_property: 'something else 2' },
    { first_dynamic_property: 'something 3', second_dynamic_property: 'null' },
    { first_dynamic_property: 'something', second_dynamic_property: 'something else' },
]

我想将此对象转换为新对象,例如:

[
    { first_dynamic_property: 'something' },
    { first_dynamic_property: 'something 2' },
    { first_dynamic_property: 'something 3' },
    { second_dynamic_property: 'something else' }
]

如果您看,该对象过滤了重复的对象并将两项转换为一项对象。我不记得如何实现这一点。你知道最好的方法吗?

谢谢并恭祝安康。

编辑1:

我使用first_dynamic_propertysecond_dynamic_property因为我不知道键名或它们的数量。它们是动态生成的。

标签: javascriptarraysjsonecmascript-6

解决方案


根据新要求更新:

let dataList = [
    { first_dynamic_property: 'something', second_dynamic_property: 'something else' },
    { first_dynamic_property: 'something 2', second_dynamic_property: 'something else 2' },
    { first_dynamic_property: 'something 3', second_dynamic_property: 'null' },
    { first_dynamic_property: 'something', second_dynamic_property: 'something else' },
]
let values = new Set();

let result = dataList.map(data => {
    let newData = {};
    for (let key in data) {
        let value = data[key];
        if (values.has(value)) continue;
        values.add(value);
        newData[key] = value;
        break;
    }
    return newData;
})

console.info(result)

推荐阅读