如何从JS对象数组中筛选各类型最高评分地点并打印名称坐标
实现方案
首先注意你提供的locaties数组里存在属性拼写错误:部分对象的坐标属性名写成了cordinaat(多了个r),如果是笔误可以先修正,下面的代码也会兼容这个拼写问题。
完整实现代码如下:
let locaties = [ {naam: 'locatie1', type: 'cafe', rating: 8, coordinaat: {lat: 17, lon: 3},}, {naam: 'locatie2', type: 'winkel', rating: 3, coordinaat: {lat: 23, lon: 9},}, {naam: 'locatie3', type: 'Restaurant', rating: 7, coordinaat: {lat: 3, lon: 17},}, {naam: 'locatie4', type: 'winkel', rating: 7, cordinaat: {lat: 20, lon: 10},}, {naam: 'locatie5', type: 'cafe', rating: 1, coordinaat: {lat: 12, lon: 13},}, {naam: 'locatie6', type: 'winkel', rating: 5, coordinaat: {lat: 13, lon: 2},}, {naam: 'locatie7', type: 'Restaurant', rating: 6, coordinaat: {lat: 7, lon: 17},}, {naam: 'locatie8', type: 'Restaurant', rating: 2, cordinaat: {lat: 3, lon: 15},}, {naam: 'locatie9', type: 'cafe', rating: 4, coordinaat: {lat: 30, lon: 12},}, {naam: 'locatie10', type: 'winkel', rating: 9, cordinaat: {lat: 27, lon: 19},}, ]; // 初始化三类场所的最高评分记录,默认评分设为-1 const topPlaces = { cafe: { rating: -1 }, winkel: { rating: -1 }, Restaurant: { rating: -1 } } locaties.forEach(item => { const currentType = item.type; // 只处理目标三类场所 if (!topPlaces.hasOwnProperty(currentType)) return; // 对比评分,更高就更新 if (item.rating > topPlaces[currentType].rating) { topPlaces[currentType] = item; } }) // 遍历输出结果 Object.values(topPlaces).forEach(place => { const coord = place.coordinaat || place.cordinaat; console.log(`名称:${place.naam}`); console.log(`坐标:lat ${coord.lat}, lon ${coord.lon}`); console.log('---') })
输出结果
名称:locatie1 坐标:lat 17, lon 3 --- 名称:locatie10 坐标:lat 27, lon 19 --- 名称:locatie3 坐标:lat 3, lon 17 ---
实现逻辑说明
- 先定义存储三类最高评分场所的对象,初始评分设为-1确保有效评分的场所都能覆盖
- 遍历原数组每一项,匹配到对应类型后和当前存储的最高评分对比,更高则替换
- 输出时兼容坐标属性的拼写错误,两种属性名都能识别
内容的提问来源于stack exchange,提问作者Julie De Cuyper
相关产品推荐
相关产品推荐

