微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

函数 userHasVisitedAllParksInState

如何解决函数 userHasVisitedAllParksInState

const parks = [
    {
      id: 1,name: "Acadia",areaInSquareKm: 198.6,location: { state: "Maine" },},{
      id: 2,name: "Canyonlands",areaInSquareKm: 1366.2,location: { state: "Utah" },{
      id: 3,name: "Crater Lake",areaInSquareKm: 741.5,location: { state: "Oregon" },{
      id: 4,name: "Lake Clark",areaInSquareKm: 10602,location: { state: "Alaska" },{
      id: 5,name: "Kenai Fjords",areaInSquareKm: 2710,{
      id: 6,name: "Zion",areaInSquareKm: 595.9,];

  const users = {
    "karah.branch3": {
      visited: [1],wishlist: [4,6],"dwayne.m55": {
      visited: [2,5,1],wishlist: [],thiagostrong1: {
      visited: [5],wishlist: [6,3,2],"don.kim1990": {
      visited: [2,wishlist: [1],};

我需要编写一个函数 userHasVisitedAllParksInState 来执行:此函数返回一个布尔值,表示用户是否从给定状态访问了公园数组中的所有公园。

我没有任何代码,因为我什至不知道从哪里开始。每当我认为我有一个想法时,它就会崩溃。任何帮助表示赞赏。

function userHasVisitedAllParksInState(parks,users,state,userId) {}

解决方法

您有很多方法可以解决这个问题,但您可以继续开发以下两个想法:

如果您不能多次访问同一个公园,那么一个解决方案非常简单。创建与请求状态匹配的公园列表,并检查该列表的长度是否与该人访问的公园数量相同。

function userHasVisitedAllParksInState(parks,users,state,userId) {
  var parksForState = parks.filter((park) => park.location.state === state);
  return users[userId].visited.length === parksForState.length;
}

另一种可能更容易理解和工作的解决方案,即使您在访问的数组中有重复的条目:

function userHasVisitedAllParksInState1(parks,userId) {
  var user = users[userId];
  var parksForState = parks.filter((park) => park.location.state === state);
  // Assume the person did visit all to start
  var visitedAll = true;
  for (var i = 0; i < parksForState.length; i++) {
    // If the park we're checking atm is in the visited array,we've still visited all parks. If parksForState[i].id is not in user.visited
    visitedAll = visitedAll && user.visited.indexOf(parksForState[i].id) > -1;
  }
  return visitedAll;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。