如何在JavaScript中按条件提取住宿数据的Count值
问题分析与解决方案
先修正数据集的核心问题
你当前的TR_Accomodation用对象存储,但同一个地点(比如Ceyhan)作为对象键重复出现,JavaScript对象的键是唯一的,后面的条目会直接覆盖前面的,这会导致大量数据丢失(比如示例里Ceyhan的100km motel数据已经被覆盖)。必须先把数据集改成数组格式,每个元素是包含所有字段的对象,示例如下:
var TR_Accomodation = [ { 'Location': 'Hacı Sabancı', 'İl': 'ADANA', 'Dist': 100, 'Accomodation_Type': 'hotel', 'Count': 52 }, { 'Location': 'Ceyhan', 'İl': 'ADANA', 'Dist': 100, 'Accomodation_Type': 'motel', 'Count': 25 }, { 'Location': 'Ceyhan', 'İl': 'ADANA', 'Dist': 50, 'Accomodation_Type': 'hotel', 'Count': 31 }, // 剩余8000条数据... ];
提取目标数据的具体实现
假设你已经通过下拉列表拿到了目标地点(比如targetLocation = 'Ceyhan'),以下两种方法可以提取符合条件的Count值:
方法1:精准匹配单个条目(推荐)
如果每个「地点+Dist+住宿类型」的组合是唯一的,用find()方法直接获取匹配对象,再提取Count:
// 从下拉框获取的目标地点 const targetLocation = 'Ceyhan'; // 筛选符合条件的条目 const matchedItem = TR_Accomodation.find(item => item.Location === targetLocation && item.Dist === 50 && item.Accomodation_Type === 'hotel' ); // 将Count值存入指定变量,无匹配时设为0 const Dist_50km_hotel = matchedItem ? matchedItem.Count : 0;
方法2:批量匹配并汇总Count
如果同一组合可能存在多个条目,用filter()获取所有匹配项,再用reduce()汇总Count:
const targetLocation = 'Ceyhan'; // 获取所有符合条件的条目 const matchedItems = TR_Accomodation.filter(item => item.Location === targetLocation && item.Dist === 50 && item.Accomodation_Type === 'hotel' ); // 汇总所有匹配条目的Count值 const Dist_50km_hotel = matchedItems.reduce((total, item) => total + item.Count, 0);
结合下拉列表的联动逻辑
配合HTML下拉列表的监听事件,完整代码示例如下:
// 获取下拉框DOM元素 const locationSelect = document.getElementById('locationSelect'); const ilSelect = document.getElementById('ilSelect'); // 监听地点下拉框变化 locationSelect.addEventListener('change', function() { const selectedLocation = this.value; const selectedIl = ilSelect.value; // 筛选同时匹配地点、省份、Dist和住宿类型的条目 const matchedItem = TR_Accomodation.find(item => item.Location === selectedLocation && item.İl === selectedIl && item.Dist === 50 && item.Accomodation_Type === 'hotel' ); // 赋值到目标变量,或直接更新页面显示 const Dist_50km_hotel = matchedItem ? matchedItem.Count : 0; console.log(`${selectedLocation}周边50公里内酒店数量:${Dist_50km_hotel}`); });
内容的提问来源于stack exchange,提问作者Solmaz
相关产品推荐
相关产品推荐

