Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在嵌入对象中查找项的位置_Javascript_Reactjs_Typescript - Fatal编程技术网

Javascript 如何在嵌入对象中查找项的位置

Javascript 如何在嵌入对象中查找项的位置,javascript,reactjs,typescript,Javascript,Reactjs,Typescript,在我的项目中,我有一个查询,返回一个轮次列表 轮次和门店之间存在一对多关系,这意味着门店有许多轮次需要填满。此外,用户可以有多个回合。以下是这些对象的形状: interface UserInterface { id: string; fullName: number; user: AuthUser; turns: Turn[]; } interface StoreInterface { name: string; turns: Turn[]; user: UserIn

在我的项目中,我有一个查询,返回一个轮次列表

轮次和门店之间存在一对多关系,这意味着门店有许多轮次需要填满。此外,用户可以有多个回合。以下是这些对象的形状:

interface UserInterface {
  id: string;
  fullName: number;
  user: AuthUser;
  turns: Turn[];
}
interface StoreInterface {
  name: string;
  turns: Turn[];
  user: UserInterface;
}
interface Turn {
  id: string;
  fullfilled: boolean;
  user: UserInterface;
  store: StoreInterface;
}
我的目标是,给定查询结果(轮次列表)和用户ID,找出用户在队列的哪个位置。我尝试了这个解决方案:

 const getTurnPosition = (): number  => {
    let turnPosition: number;
    data.getTurnsForUser.map((turn: Turn) => {
      const turnList = turn.store.turns.filter(
        (turn) => turn.fullfilled === false
      );
      const myTurn = turnList.find(
        (turn: Turn) => turn.user.user.id === userId
      );
      if (myTurn) {
        turnPosition = turnList.indexOf(myTurn);
        return turnPosition;
      }
    });
  };
正如您所看到的,我需要首先去掉已经充满
filter()
方法的回合。然后,我使用
find()

但是这种方法存在一个问题:即使当我看到正确的索引时,
console.log(turnPosition)
,函数仍返回
undefined
。Typescript也警告我这一点

我对这个很迷茫。我做错了什么

PD:这是完整查询(graphQL)的一个示例:


您正在
map
函数中返回,但实际上从未从
getTurnPosition()
函数中返回任何内容,这就是它显示
未定义的原因。您可以将其更改为如下所示:

const getTurnPosition = (userId: number): number => {
  for (let turn of data.getTurnsForUser) {
    const unfulfilledTurns = turn.store.turns.filter(
      (t) => t.fulfilled === false
    );
    return unfulfilledTurns.findIndex((t) => t.user.id === userId);
  }
};
这是因为这是您感兴趣的,但也只是在找到某个顶级
回合中发现的第一个未完成回合的第一个索引时立即返回

如果您确实需要每个
存储
转弯位置的索引数组,则需要返回
地图
,但您可能需要一些额外的标识信息,该转弯索引所指的
存储

const getTurnPosition = (userId: number): number => {
  return data.getTurnsForUser.map(turn => {
    const unfulfilledTurns = turn.store.turns.filter(
      (t) => t.fulfilled === false
    );
    return unfulfilledTurns.findIndex((t) => t.user.id === userId);
  });
};

谢谢你的回答!我明天试试看
const getTurnPosition = (userId: number): number => {
  return data.getTurnsForUser.map(turn => {
    const unfulfilledTurns = turn.store.turns.filter(
      (t) => t.fulfilled === false
    );
    return unfulfilledTurns.findIndex((t) => t.user.id === userId);
  });
};