我正在尝试格式化从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()函数,但不确定如何使用对象列表来实现它。我是否必须创建一个嵌套循环才能访问每个单独的元素?
答案 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)