javascript - 如何查找数组是否有匹配的对象?
问题描述
我需要循环 2 个数组并查看它们是否有匹配的对象,如果有,请在地图上添加一个标记,当我单击它时,我想告诉匹配坐标的总结果数,在以下示例中为 2。标记很好,因为我正在循环数组并根据坐标放置它,但我不能给出相同坐标内的货币总数。
因此我有:
latitude = [{"45.99"},{43.22},{"45.99"}];
longitude = [{"9.22"},{"2.645"},{"9.22"}];
这个答案有点帮助,基本上它使用filter
但我想做的是检查两个数组是否有任何匹配值并将结果数放在模态中。
目前我做:
$("#results .modal-body").html("Risultati"+" " +longitude.length + "<button id='goToResul' type='button' class='btn btn-danger'>Go to result</button>");
但这会检查整个longitude
数组的长度,而在数组示例中,我们有两次 45.99 和 9.22,这意味着 2 个匹配项。
可能有帮助的是经度和纬度都遵循相同的索引
解决方案
根据我的理解,您可以尝试以下方法
var lat = ["45.99","43.22","45.99", "45.99"]
, lng = ["9.22","2.645","9.22", "9.22"]
, latlngCount = Object.entries(lat.reduce((o, d, i) => (o[lat[i]+'-'+lng[i]] = (o[lat[i]+'-'+lng[i]] || 0) + 1, o) , {})).filter(([latlng, count]) => count > 1)
, matchingCount = latlngCount.reduce((sum, [latlng, count]) => sum + count, 0)
console.log('Matching lat lng', latlngCount)
console.log('Matching Count', matchingCount)