[英]Javascript search array of lists of arrays
我有一个需要循环遍历的项目列表。 我需要搜索一个项目数组是否包含一个项目数组。 这是数组,第一个值是时间戳,第二个是计数:
const i = [
[1614719782079, 1],
[1614719782085, 1],
[1614719782091, 2],
[1614719782096, 2],
]
我有一个 forEach 循环,它从我的后端遍历所有这些数据,我需要检查时间戳是否存在于数组中(第一个值),如果存在,则添加到数组的第二个值(计数)。 这是来自后端的示例数据:
const mockData = [
{
...someData,
details: {
eventTimestamp: 1614719782079,
equipmentId: 5,
otherUselessData...
}
},
{
...someData,
details: {
eventTimestamp: 1614719782079,
equipmentId: 5,
otherUselessData...
}
}
]
基本上,如果eventTimestamp
中的 eventTimestamp 存在于i
中,则增加该数组中的第二个值。 PS不要问这个数据lol的可怕结构。 这就是我必须使用的全部内容
以下代码应该可以解决问题:
mockData.forEach(mock => {
const el = i.find(e => e[0] === mock.details.eventTimestamp);
if(el) {
el[1]++
}
})
这是一个可能的解决方案:
i
的元素的Map
其中第一项是key
,第二项是value
mockData
,并且在每次迭代中,如果eventTimestamp
在此 map 中,则增加其value
i
到这个 map 的entries
let i = [ [1614719782079, 1], [1614719782085, 1], [1614719782091, 2], [1614719782096, 2], ]; const mockData = [ { details: { eventTimestamp: 1614719782079, equipmentId: 5 } }, { details: { eventTimestamp: 1614719782079, equipmentId: 5 } } ]; const updateTimestampCounts = (arr=[]) => { const map = new Map(); i.forEach(([ timestamp, count ]) => map.set(timestamp, count)); arr.forEach(({ details={} }) => { const { eventTimestamp } = details; const count = map.get(eventTimestamp); if(count) map.set(eventTimestamp, count+1); }); i = [...map.entries()]; } updateTimestampCounts(mockData) console.log(i);
这是我编辑的解决方案,对不起,第一次没看懂
const i = [ [1614719782079, 1], [1614719782085, 1], [1614719782091, 2], [1614719782096, 2], ] const mockData = [ { details: { eventTimestamp: 1614719782079, equipmentId: 5, } }, { details: { eventTimestamp: 1614719782079, equipmentId: 5, count: 1, } } ] mockData.forEach(mock => { const el = i.find(e => e[0] === mock.details.eventTimestamp); if(el) { el[1]++ } }) console.log(i)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.