Javascript 函数userHasVisitedAllParksInState

Javascript 函数userHasVisitedAllParksInState,javascript,arrays,function,javascript-objects,Javascript,Arrays,Function,Javascript Objects,我需要编写一个函数userHasVisitedAllParksInState,该函数返回一个布尔值,表示用户是否从给定状态访问了parks数组中的所有公园 我没有任何代码,因为我甚至不知道从哪里开始。每次我想我有了一个想法,它就崩溃了。感谢您的帮助 const parks = [ { id: 1, name: "Acadia", areaInSquareKm: 198.6, location: { state: &quo

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

我没有任何代码,因为我甚至不知道从哪里开始。每次我想我有了一个想法,它就崩溃了。感谢您的帮助

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,
      location: { state: "Alaska" },
    },
    {
      id: 6,
      name: "Zion",
      areaInSquareKm: 595.9,
      location: { state: "Utah" },
    },
  ];

  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, 6],
      wishlist: [1],
    },
  };

你有很多方法可以解决这个问题,但这里有两个想法你可以继续发展:

如果你不能多次参观同一个公园,那么有一个解决方案非常简单。创建一个符合请求状态的公园列表,并检查其长度是否与所访问的公园数量相同

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;
}
函数userhasvisitedallparksinsstate1(公园、用户、状态、用户ID){
var user=users[userId];
var parksForState=parks.filter((park)=>park.location.state===state);
//假设该人确实访问了所有开始
var visitedAll=true;
对于(变量i=0;i-1;
}
回访所有人;
}

欢迎杰西。你能介绍一些你尝试过的想法吗?否则,问题可能会因为“不够努力”或“太宽泛”而结束。谢谢,克里斯!抱歉,我以前从未使用过这个网站,所以我不知道。谢谢!您的第一个答案是我的速度,因为我还没有在程序中真正了解indexOf()。这很有帮助。
function userHasVisitedAllParksInState1(parks, users, state, 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;
}