Javascript 如何根据select标记中选择的数字过滤json数据
假设我有一个json文件:Javascript 如何根据select标记中选择的数字过滤json数据,javascript,json,ajax,Javascript,Json,Ajax,假设我有一个json文件: [ { "restaurantName":"name1", "address":"restaurant1 address", "lat":lat1, "long":long1, "ratings":[ { "stars":4, "comment":"good" }, { "stars":5, "comme
[
{
"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>
0
1.
2.
3.
4.
1.
2.
3.
4.
5.
滤波器
问题是,我找不到一种方法来过滤这些数据,并获取在选择标记中选择的两个数字之间具有星级的餐厅列表。您可以使用函数
数组。减少以对星级值求和,函数数组。过滤以检查从到
的分级间隔
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”,“restaurant2 address”:“restaurant2 address”,“lat”:1,“long”:1,“ratings”:[{“stars”:4,“comment”:“good”},{“stars”:3,“comment”:“ok”}]}],
ratingFrom=3,//从s1选择
ratingTo=4,//从s2选择
结果=数据。过滤器(d=>{
让平均值=d.额定值减少((a,r)=>a+r.星,0)/d.额定值.长度;
return avg>=ratingFrom&&avg首先,我建议检查和上的文档。
在下面的示例中,您可以看到问题的可能解决方案
您可以通过使用求和星号值来计算评级的平均值,然后您可以将计算值与
中的选定值进行比较,这就是问题所在,简而言之-此函数将返回一个新数组,其中包含满足预定义条件的元素(在我们的例子中,它是avgRating>=minRating&&avgRating{
常量filteredRestaurants=data.filter(条目=>{
常数额定值=输入额定值;
常数=额定值
.map(评级=>评级.stars)
.减少((上一个,下一个)=>{
返回上一个+下一个;
},0)/1.5米长;
const minRating=document.getElementById('s1')。值;
const maxRating=document.getElementById('s2')。值;
return avgRating>=minRating&&avgRating因此,首先我想您需要每个餐厅的平均评级。如果您完成了,您可以使用过滤方法确定,我将对此进行研究,谢谢