如何使用JavaScript从具有多个参数的数组中删除重复项

时间:2019-06-05 14:39:48

标签: javascript

我正在尝试格式化从csv文件创建的数组。将其解析为正确的格式后,我需要一种方法来从csv文件中删除遇到的重复项。

这是我拥有的数组的一个例子

[{
    "pccs": ["1ADA"],
    "markets": [{
        "origin": "LAX",
        "destination": "DFW"
    }, {
        "origin": "LAX",
        "destination": "IAH"
    }, {
        "origin": "LAX",
        "destination": "IAH"
    }, {
        "origin": "LAX",
        "destination": "IAH"
    }]
}, {
    "pccs": ["1ABA"],
    "markets": [{
        "origin": "LAX",
        "destination": "JFK"
    }]
}]

我正在尝试将其设置为仅显示列表中每个元素的唯一集合的格式,以获得这样的响应:

[{
    "pccs": ["1ADA"],
    "markets": [{
        "origin": "LAX",
        "destination": "DFW"
    }, {
        "origin": "LAX",
        "destination": "IAH"
    }]
}, {
    "pccs": ["1ABA"],
    "markets": [{
        "origin": "LAX",
        "destination": "JFK"
    }]
}]

我倾向于使用filter()函数,但不确定如何使用对象列表来实现它。我是否必须创建一个嵌套循环才能访问每个单独的元素?

1 个答案:

答案 0 :(得分:0)

您可以创建一个辅助函数,以使用every()比较两个对象。然后在数组的每个元素的filter()上使用markets,然后删除所需的元素。

注意:我使用过forEach,代码将修改原始数组,因为如果不是这种情况,我认为您需要修改原始数组,请问我将添加其他解决方案。

const arr = [{ "pccs": ["1ADA"], "markets": [{ "origin": "LAX", "destination": "DFW" }, { "origin": "LAX", "destination": "IAH" }, { "origin": "LAX", "destination": "IAH" }, { "origin": "LAX", "destination": "IAH" }] }, { "pccs": ["1ABA"], "markets": [{ "origin": "LAX", "destination": "JFK" }] }]

const compObjs = (obj1, obj2) => Object.keys(obj1).every(k => obj1[k] === obj2[k])
arr.forEach(x => {
  x.markets = x.markets.filter(a => x.markets.find(b => compObjs(b,a)) === a)
})
console.log(arr)

相关问题