假设我有这个json文件:
[
{
"restaurantName":"name1",
"address":"restaurant1 address",
"lat":lat1,
"long":long1,
"ratings":[
{
"stars":4,
"comment":"good"
},
{
"stars":5,
"comment":"excellent"
}
]
},
{
"restaurantName":"name2",
"address":"restaurant2 address",
"lat":lat2,
"long":long2,
"ratings":[
{
"stars":4,
"comment":"good"
},
{
"stars":3,
"comment":"ok"
}
]
}
]
而这个html代码:
<select id="s1">
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
</select>
<select id="s2">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
</select>
<button type="button" id="btn">filter</button>
问题是我找不到一种方法来过滤此数据并获得在选择标签中选择的两个数字之间具有星级评分的餐厅列表。
您可以使用该功能Array.reduce
对星星值求和,该功能Array.filter
可以检查from-to
评级间隔。
let data = [ { "restaurantName":"name1", "address":"restaurant1 address", "lat":1, "long":1, "ratings":[ { "stars":4, "comment":"good" }, { "stars":5, "comment":"excellent" } ] }, { "restaurantName":"name2", "address":"restaurant2 address", "lat":1, "long":1, "ratings":[ { "stars":4, "comment":"good" }, { "stars":3, "comment":"ok" } ] } ],
ratingFrom = 3, // from s1 select
ratingTo = 4, // from s2 select
result = data.filter(d => {
let avg = d.ratings.reduce((a, r) => a + r.stars, 0) / d.ratings.length;
return avg >= ratingFrom && avg <= ratingTo;
});
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句