【问题标题】:How to retrieve second level data from Multidimensional array in Angular 7 Ionic 5如何从Angular 7 Ionic 5中的多维数组中检索二级数据
【发布时间】:2019-09-26 21:21:27
【问题描述】:

我是 Angular 的新手,我正在尝试多维数组。我成功地检索并显示了我的 json 多维数组中的第一级数据。但是,我似乎找不到从数组的第二层检索数据的正确语法。我已经查看了很多多维数组的解决方案,但似乎没有一个适合我想要做的事情。我创建了一个服务组件并将我的代码添加到其中。这是我目前所拥有的:

精简数组定义(实际数组有更多元素和字段):

private _fundraisers: Fundraiser[] = [
    {
      fundId: 'f1',
      fundTitle: 'The happy fund',
      items: [
        {
          itemId: '66', 
          itemTitle: 'sixTea6'
        },
        {
          itemId: '88', 
          itemTitle: 'eighTea8',
        }]
    }
  ];

我有以下函数使用变量fundId从顶级数组中检索一个元素。

getFundraiser(fundId: string) {
    return {...this._fundraisers.find(fundraiser => {
      return fundraiser.fundId === fundId;
    })};
  }

此函数返回fundId 所需的元素和所有“项目”。现在,当用户选择其中一个“项目”时,我只想返回该项目的所有详细信息。因此,如果我正在显示“f1”的记录并且用户选择了“66”项,我想将“f1”和“66”传递给一个函数并返回 f1/66 的详细信息。这是我尝试过的,但没有成功。

  getFundraiserItem(fundId: string, itemId: string) {
    this._fundraisers.find(fundraiserItem => {       
      if (fundraiserItem.fundId === fundId) {
        console.log(fundraiserItem[0][fundId][0].itemId[0].itemId);
      }
    });
  }

显然我只是使用 console.log 来测试我的代码。因此,console.log 将被某种形式的返回所取代。我试图根据堆栈溢出的其他解决方案将这段代码拼凑在一起。但我可能离题太远了。任何帮助将不胜感激。

【问题讨论】:

  • 试试这个console.log(((this._fundraisers.filter( (fund) => fund.fundId == fundId )) as any[])[0] ? ((this._fundraisers.filter( (fund) => fund.fundId == fundId )) as any[])[0].items.filter( (item:any)=> item.itemId == itemId) : []);

标签: arrays angular typescript


【解决方案1】:
getFundraiserItem(fundId: string, itemId: string) {
  var fundraiser = this._fundraisers.find(fundraiser => fundraiser.fundId === fundId);
  var item = fundraiser.items.find(item => item.itemId === itemId);
  return item;
}

【讨论】:

    【解决方案2】:

    未经测试,但我认为您可以这样做,通过fundId和itemId获取项目:

        getFundraiserItemById(fundId: string, itemId: string): ItemModelHere | undefined {
     const relevantFundraiser: Fundraiser | undefined = this._fundraiser.find((f) => f.fundId === fundId);
    if (!relevantFundraiser || !relevantFundraiser.items) {
    return undefined;
    }
    return relevantFundraiser.items.find((item) => item.itemId === itemId);
    

    }

    【讨论】:

    • 也测试了这个解决方案。有用。我喜欢“未定义”的捕获逻辑。
    • 是的,这个处理not found 逻辑。上面的答案可能会抛出错误
    • 是否需要此代码“ItemModelHere | undefined”才能使未找到的逻辑工作?
    • 没有。它只是输入函数的返回值
    猜你喜欢
    • 1970-01-01
    • 2018-11-10
    • 2018-05-26
    • 1970-01-01
    • 2018-11-25
    • 2020-05-30
    • 1970-01-01
    • 1970-01-01
    • 2019-05-07
    相关资源
    最近更新 更多