0

我正在映射一个数据数组以获取我到点的距离,结果我得到(空过滤、排序数组然后提取)距离我最近的点。结果我得到“距离:234456”。

现在,我正在尝试对具有更多属性的新/相同数据数组执行相同的操作,并且与 map.distance 结果一起,我也会获得额外的属性作为回报。

新数据数组将具有这样的对象{id: "1", Point: "-34.910490, -56.201567", A: "4"},假设这将是最近的点,我会得到“距离:234456 和 A:4”的回报。

Data : [{id: "1", Point: "27.1597268, 40.6646601"},
        {id: "2", Point: "11.1640393, 49.6487153"},
        {id: "3", Point: "26.1539253, 42.6599287"}, 
        {id: "4", Point: "21.1597268, 44.6646601"}],


const distances = this.state.Data.map(
      (item) =>
        !!(coords.longitude && coords.latitude) &&
        getPreciseDistance(coords, item.Point)
    )
      .filter(Boolean)
      .sort()
      .map((distance) => <Text>{distance},</Text>);
4

1 回答 1

1

为了使您的函数返回一个具有属性的对象,distancea可以将 map 函数更改为不仅返回单个值,而且返回您想要的对象:

const distances = this.state.Data.map(
      (item) =>
        !!(coords.longitude && coords.latitude) &&
        // return an object instead of a single number
        ({ distance: getPreciseDistance(coords, item.Point), a: item.a})
    )
      .filter(Boolean)
      .sort()

但是,如果您正在搜索距离最大的单个项目,我通常会在函数链的末尾使用find 函数。这样您就可以确保您的函数始终只返回一项。

于 2021-10-14T06:02:28.287 回答