Javascript 如何根据select标记中选择的数字过滤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

假设我有一个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>

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因此,首先我想您需要每个餐厅的平均评级。如果您完成了,您可以使用过滤方法确定,我将对此进行研究,谢谢