Javascript 返回对象名称的函数

Javascript 返回对象名称的函数,javascript,arrays,function,javascript-objects,higher-order-functions,Javascript,Arrays,Function,Javascript Objects,Higher Order Functions,我需要创建一个函数来实现这一点:该函数返回给定用户愿望列表中访问过任何公园的所有用户名 const parks = [ { id: 1, name: "Acadia", areaInSquareKm: 198.6, location: { state: "Maine" }, }, { id: 2, name: "Canyonlands",

我需要创建一个函数来实现这一点:该函数返回给定用户愿望列表中访问过任何公园的所有用户名

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],
    },
  };
这是我目前所拥有的,但它不起作用:

getUsersForUserWishlist(users, "karah.branch3"); //> ["dwayne.m55"]
getUsersForUserWishlist(users, "dwayne.m55"); //> []

请记住:我刚刚完成了课程的一部分,内容涉及高级函数(查找、筛选、映射、某些、每个、forEach),我应该用它们来解决问题。

让我们看看您尝试过的:

function getUsersForUserWishlist(users, userId) {
  let wish = userId.wishlist;
  return users[userId].visited.map((visited) => wish.includes(visited));
}
这里,
userId
是一个字符串。字符串没有属性
愿望列表
。您需要获取与该ID对应的用户对象:
users[userId].wishlist
。就像你在第二行做的那样:

let wish = userId.wishlist;
然而,这并不是你想要实现的最好的方法。您希望更改用户名以仅保留通过条件的用户名。也就是说,愿望列表中的公园位于该用户访问的公园列表中:

const用户={
“karah.branch3”:{访问:[1],愿望清单:[4,6]},
“dwayne.m55”:{访问:[2,5,1],愿望列表:[]},
“thiagostrong1”:{访问:[5],愿望者:[6,3,2]},
“唐·金1990”:{访问:[2,6],愿望清单:[1]}
};
函数getUsersForUserWishlist(用户,用户ID){
const wishlist=用户[userId]。wishlist;
//获取所有用户名
返回Object.keys(用户)
//过滤它们
.过滤器(
//如果愿望列表中有该用户访问过的某些元素
name=>wishlist.some(公园=>users[name]。已访问。包括(公园))
);
}
console.log(getusersfourserwishlist(用户,“karah.branch3”);/>[“唐·金1990”]

log(getUsersForUserWishlist(用户,“dwayne.m55”);/>[]
让我们回顾一下您尝试的内容:

function getUsersForUserWishlist(users, userId) {
  let wish = userId.wishlist;
  return users[userId].visited.map((visited) => wish.includes(visited));
}
这里,
userId
是一个字符串。字符串没有属性
愿望列表
。您需要获取与该ID对应的用户对象:
users[userId].wishlist
。就像你在第二行做的那样:

let wish = userId.wishlist;
然而,这并不是你想要实现的最好的方法。您希望更改用户名以仅保留通过条件的用户名。也就是说,愿望列表中的公园位于该用户访问的公园列表中:

const用户={
“karah.branch3”:{访问:[1],愿望清单:[4,6]},
“dwayne.m55”:{访问:[2,5,1],愿望列表:[]},
“thiagostrong1”:{访问:[5],愿望者:[6,3,2]},
“唐·金1990”:{访问:[2,6],愿望清单:[1]}
};
函数getUsersForUserWishlist(用户,用户ID){
const wishlist=用户[userId]。wishlist;
//获取所有用户名
返回Object.keys(用户)
//过滤它们
.过滤器(
//如果愿望列表中有该用户访问过的某些元素
name=>wishlist.some(公园=>users[name]。已访问。包括(公园))
);
}
console.log(getusersfourserwishlist(用户,“karah.branch3”);/>[“唐·金1990”]

log(getUsersForUserWishlist(用户,“dwayne.m55”);/>[]
我很难理解这里的逻辑。你能解释一下为什么
[“dwayne.m55”]
karah.branch3
的预期输出吗。根据您对函数“此函数返回给定用户愿望列表中访问过任何公园的所有用户名”的描述,我希望它是
[“don.kim1990”]
,因为dom.kim1990访问了Karah愿望列表中的park 6。我很难理解这里的逻辑。你能解释一下为什么
[“dwayne.m55”]
karah.branch3
的预期输出吗。根据您对函数“此函数返回给定用户愿望列表中访问过任何公园的所有用户名”的描述,我希望它是
[“don.kim1990”]
,因为dom.kim1990访问了Karah愿望列表中的park 6,非常感谢!我已经把这个东西忘得一干二净了。钥匙()啊,太谢谢你了!我已经完全忘记了Object.keys()