我有一个这样存储的经度和纬度的对象数组,以及一个包含纬度和经度的数组的过滤器数组。我想根据纬度和经度过滤数据。
var data = [{LatLng:[34.09755005, -118.2900766],all_time: 22, wait_list: 217}
{LatLng:[21.30799045, -157.853676],all_time: 23, wait_list: 210},
{LatLng:[36.0678305, -110.2900766],all_time: 19, wait_list: 237},
{LatLng:[26.0665546, -130.8946739],all_time: 15, wait_list: 307}
]
我还有另一个要用作过滤器的数组
var nearest_array = [[21.30799045, -157.853676],[26.0665546, -130.8946739]]
结果数组应为
var result_array = [{LatLng:[26.0665546, -130.8946739],all_time: 15, wait_list: 307},{LatLng:[21.30799045, -157.853676],all_time: 23, wait_list: 210}]
我尝试了一些东西,但似乎无济于事–
data.filter(x => x.LatLng.some(g => nearest_array.includes(g)))
data.filter(x => nearest_array.includes(x.LatLng))
答案 0 :(得分:4)
您可以使用Array.filter
,Array.some
和Array.every
来做到这一点:
const data = [{ LatLng: [34.09755005, -118.2900766], all_time: 22, wait_list: 217 }, { LatLng: [21.30799045, -157.853676], all_time: 23, wait_list: 210 }, { LatLng: [36.0678305, -110.2900766], all_time: 19, wait_list: 237 }, { LatLng: [26.0665546, -130.8946739], all_time: 15, wait_list: 307 } ]
const filters = [ [21.30799045, -157.853676], [26.0665546, -130.8946739] ]
const result = data.filter(({LatLng}) =>
filters.some(f => LatLng.every(l => f.includes(l))))
console.log(result)
这个想法是先过滤主数组及其内部的过滤器,以确保至少filters
中的一个元素在LatLng
数组中具有所有匹配的元素。
答案 1 :(得分:1)
您可能不是filter
,而是.map
的{{1}},而nearest_array
关联的.find
项-LatLng
有点多如果您的输入数组和输出数组是一对一的,则合适:
.map
(非原语,例如对象,数组和函数,彼此不相等,除非它们引用内存中的相同项目-例如var data=[{LatLng:[34.09755005,-118.2900766],all_time:22,wait_list:217},{LatLng:[21.30799045,-157.853676],all_time:23,wait_list:210},{LatLng:[36.0678305,-110.2900766],all_time:19,wait_list:237},{LatLng:[26.0665546,-130.8946739],all_time:15,wait_list:307}];var nearest_array=[[21.30799045,-157.853676],[26.0665546,-130.8946739]]
const output = nearest_array.map((numsToFind) => {
const joined = numsToFind.join(',');
return data.find(({ LatLng }) => LatLng.join(',') === joined);
});
console.log(output);
,因为那里有两个单独的数组,每个都有不同的内存位置。因此,您的[1, 2] !== [1, 2]
测试无法正常工作
答案 2 :(得分:1)
您可以使用函数filter
并使用函数latitude
检查longitude
和some
,这是为了检查至少一个包含这些坐标的对象。 / p>
var data = [{LatLng:[34.09755005, -118.2900766],all_time: 22, wait_list: 217},{LatLng:[21.30799045, -157.853676],all_time: 23, wait_list: 210},{LatLng:[36.0678305, -110.2900766],all_time: 19, wait_list: 237},{LatLng:[26.0665546, -130.8946739],all_time: 15, wait_list: 307}],
nearest_array = [[21.30799045, -157.853676],[26.0665546, -130.8946739]],
result = data.filter(({LatLng: [lat, lon]}) => nearest_array.some(([ilat, ilon]) => lat === ilat && lon === ilon));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }