【发布时间】:2019-06-17 10:51:58
【问题描述】:
我有这个数据集
var records = [{
gc: '2',
time: 1231232423,
cards: [{
cardCode: '12121',
rssi: 23
}, {
cardCode: '12122',
rssi: 33
}, {
cardCode: '12421',
rssi: 43
}
]
},
{
gc: '3',
time: 4331232233,
cards: [{
cardCode: '6423',
rssi: 23
}, {
cardCode: '12421',
rssi: 13
}
]
}, , {
gc: '4',
time: 4331232233,
cards: [{
cardCode: '8524',
rssi: 03
},
{
cardCode: '6423',
rssi: 23
}, {
cardCode: '12421',
rssi: 67
}
]
}
]
我有一个对象数组(records),每个对象中都有另一个数组(cards)。这意味着如果我将始终在“记录”中存在的对象内拥有cards 数组。所以从一开始我想遍历整个列表records并比较所有对象的卡片数组,然后找到匹配对象的rssi值并将对象(具有最小rssi值)推入另一个新数组.最后以同样的方式,我想要一个数组,其中包含所有具有最小 rssi 值的匹配对象。我正在使用lodash 并尝试过这个
matchedRecords = records.forEach(record=>{
record.cards.forEach(record=>{
_.filter(records, _.flow(
_.property('cards'),
_.partialRight(_.some, { cardCode: record.cardCode })
));
})
})
我想要的结果是
[
{
gc : 3,
cards : [{
cardCode : '12421',
rssi : 13
}]
}
]
注意:卡片数组对象应该在cardCode key的基础上进行比较
【问题讨论】:
-
cardCode: '8524'的 rssi 应该是 30?如果是 3 应该是最小值。 -
不,我必须遍历整个
records数组并在每个卡片数组中找到匹配的卡片并找到具有最小 rssi 的对象。在我上面提到的数据集中,cardCode等于12421的对象存在于records的所有三个对象中,因此代码应该返回具有最小 rssi 值的对象 -
你知道只有一张匹配的卡吗?如果不是,
gc: 3在结果中来自哪里?一个 cardCode 的最低rssi可能与另一个 cardCode 的最低 rssi 位于不同的记录中。 -
不,我不知道匹配的卡片是什么,因为卡片数组在
records的每个对象中都是动态的 -
因为代码应该首先比较并获取匹配的记录,所以在我给定的数据集中只有一个对象
cardCode: '12421' 存在。基本上我想根据cardCode匹配记录,你可以看到12421的对象存在于records内的所有三个对象中,通过比较每个对象的rssi,最小rssi为13和cardCode : 12421
标签: javascript lodash