gpt4 book ai didi

javascript - ReactJS:如何在 JavaScript 中过滤数组以在 map 上显示特定图像

转载 作者:行者123 更新时间:2023-12-04 10:37:06 25 4
gpt4 key购买 nike

我正在使用 AISHub APIs 构建船只可视化器.查询 API 后,我可以获得一个包含我感兴趣的容器的 json 文件,并将这些容器注入(inject)到一个表格中,如下所示:

map

在打印屏幕上显示的表格中,有 16 艘船,但它们来自不同的公司。显示的 Logo 数量正好是 16,就像表格的行数一样。

问题 是我只看到一个 Logo ,而不是 table 上所有其他公司的 Logo (因此在 google-map 上)。

我已经准备了一个关联图,可以在下面的代码中看到:

ShipTracker.js :

import donjonImage from '../logos/donjon.jpg';
import dutraImage from '../logos/dutra.png';
import glddImage from '../logos/greatlakesdredgeanddock.png';

const shipCompanyMap = {
Michigan: 'DONJON',
STUYVESANT: 'DUTRA',
Ellis_Island: 'GREATLAKESDREDGEANDDOCK'
};

const companyImageMap = {
DONJON: donjonImage,
DUTRA: dutraImage,
GREATLAKESDREDGEANDDOCK: glddImage,
};

const associationMap = Object.values(shipCompanyMap).reduce(
(acc, curr) => ({
...acc,
[curr]: companyImageMap[curr]
}),
{}
);


const Ship = ({ ship }) => {
const shipName = ship.NAME;
const company = shipCompanyMap[shipName];
const shipImage = companyImageMap[company];

return (
<div>
<img src={glddImage} alt="Logo" /> // <-- I think loop should go here?
</div>
);
};
export { Ship };

const ShipTracker = ({ ships }) => {
const handleRowClick = (rowValue) => {
console.log(rowValue);
};
return (
<div className="ship-tracker">
<Table className="flags-table" responsive hover>
<thead>
<tr>
<th>#</th>
<th>Name</th>
<th>Callsign</th>
<th>Heading</th>
<th>SOG</th>
<th>IMO</th>
<th>MMSI</th>
<th>Longitude</th>
<th>Latitudee</th>
</tr>
</thead>
<tbody>
{ships.map((ship, index) => {
const { IMO, NAME, CALLSIGN, HEADING, SOG, MMSI, LONGITUDE, LATITUDE } = ship;
const cells = [ NAME, CALLSIGN, HEADING, SOG, IMO, MMSI, LONGITUDE, LATITUDE ];
return (
<tr onClick={() => handleRowClick(ship)} key={index}>
<th scope="row">{index}</th>
{cells.map((cell) => <td>{cell}</td>)}
</tr>
);
})}
</tbody>
</Table>
</div>
);
};

export default ShipTracker;

GoogleMap.js 文件是我渲染 Logo 的位置以及(我认为)我应该操作过滤或搜索以确保显示与 map 上显示的公司相对应的 Logo :
import { Ship } from '../components/ShipTracker';

class BoatMap extends Component {
constructor(props) {
super(props);
this.state = {
buttonEnabled: true,
buttonClickedAt: null,
progress: 0,
ships: []
};
this.updateRequest = this.updateRequest.bind(this);
this.countDownInterval = null;
}

// Other operations.....

render() {
return (
<div className="google-map">
<GoogleMapReact
bootstrapURLKeys={{ key: 'My_KEY' }}
center={{
lat: 42.4,
lng: -71.1
}}
zoom={8}
>
{this.state.ships.map((ship) => ( // <-- maybe the filter function here?
<Ship ship={ship} key={ship.CALLSIGN} lat={ship.LATITUDE} lng={ship.LONGITUDE} />
))}


</GoogleMapReact>
</div>
);
}
}

到目前为止我做了什么: :

1)这是一个循环问题。我试图循环通过提供的 API 提取的公司,并尝试将该公司与其 Logo 匹配并将其显示在谷歌地图上,但我不确定如何组织循环,因为我只看到一个 Logo 而不是更多。

2) 在做了一些研究后,我发现了 filtering function并尝试使用一点点来遍历一组 Logo 。

3) 我认为 this post正是我一直在寻找的东西,并在研究了如何使用它后尝试申请。但是,我仍然无法遍历一个数组并将每个公司分配给它的 Logo 。

感谢您指出解决此问题的正确方向。

最佳答案

如果我理解正确,这里的问题是您的 <Ship /> 中的 Logo 图像的渲染。组件需要是动态的。目前它是静态的,并且被“硬编码”到 glddImage图像,这就是为什么只显示一个 Logo 的原因。

假设 ship.NAME 的值在 <Ship />"Michigan" 中的任何一个, "STUYVESANT" , 或 "Ellis_Island" ,那么以下更新应该会完成您的实现:

const Ship = ({ ship }) => {
const shipName = ship.NAME;
const company = shipCompanyMap[shipName];

/* Optional */
const defaultFallbackImage = "../path/to/image-not-found-placeholder.png"

/* Use fallback image if no company image found */
const shipImage = companyImageMap[company] || defaultFallbackImage;

return (
<div>
{/* Render shipImage image */}
<img src={shipImage} alt="Logo" />
</div>
);
};

export { Ship };

关于javascript - ReactJS:如何在 JavaScript 中过滤数组以在 map 上显示特定图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60120561/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com