如何在循环内显示数组元素

Posted

技术标签:

【中文标题】如何在循环内显示数组元素【英文标题】:how to display an element of array inside a loop 【发布时间】:2019-08-27 09:22:02 【问题描述】:

我正在尝试在循环中显示数组元素。

result: 
  "success": true,
  "message": "Categories Found",
  "code": 200,
  "data": 
    "total": 5,
    "per_page": 15,
    "current_page": 1,
    "last_page": 1,
    "next_page_url": null,
    "prev_page_url": null,
    "from": 1,
    "to": 5,
     "data": [
          
            "id": 8,
            "asset_id": 76,
            "parent_id": 12,
            "lft": 12,
            "rgt": 13,
            "level": 2,
            "path": "clothes/women",
            "extension": "com_content",
            "title": "Women",
            "alias": "women",
            "note": "",
            "description": "",
            "published": 1,
            "checked_out": 496,
            "checked_out_time": "2019-04-05 11:25:34",
            "access": 1,
            "params": "\"category_layout\":\"\",\"image\":\"images\\/themeparrot\\/banner-category\\/banner.png\",\"image_alt\":\"women\"",
            "metadesc": "",
            "metakey": "",
            "metadata": "\"author\":\"\",\"robots\":\"\"",
            "created_user_id": 496,
            "created_time": "2017-10-06 07:34:39",
            "modified_user_id": 496,
            "modified_time": "2017-12-05 12:39:35",
            "hits": 0,
            "language": "*",
            "version": 1
          ,
          
            "id": 9,
            "asset_id": 78,
            "parent_id": 12,
            "lft": 14,
            "rgt": 15,
            "level": 2,
            "path": "clothes/men",
            "extension": "com_content",
            "title": "Men",
            "alias": "men",
            "note": "",
            "description": "",
            "published": 1,
            "checked_out": 0,
            "checked_out_time": "0000-00-00 00:00:00",
            "access": 1,
            "params": "\"category_layout\":\"\",\"image\":\"images\\/themeparrot\\/banner-category\\/banner_02.png\",\"image_alt\":\"men\"",
            "metadesc": "",
            "metakey": "",
            "metadata": "\"author\":\"\",\"robots\":\"\"",
            "created_user_id": 496,
            "created_time": "2017-10-06 07:42:58",
            "modified_user_id": 496,
            "modified_time": "2017-12-05 12:39:40",
            "hits": 0,
            "language": "*",
            "version": 1
          ,

上面是一个 Api 的响应。这是循环功能,需要在参数下显示图像。

还有我的 ts:

displaycategory()
    this.showLoader();
    this.categories.categorydisplay().then((result) => 
      console.log('result:'+JSON.stringify(result));
      this.loading.dismiss(); 
      this.data = JSON.parse(JSON.stringify(result));
      this.categorydata = JSON.parse(JSON.stringify(this.data.data.data));

    ), (err) => 
      console.log(err);
      this.loading.dismiss();
    

html

<ion-grid>
        <ion-row>
        <ion-col col-6  *ngFor="let tms of categorydata;" (click)="test($event, tms.id)" >

  <ion-card *ngIf="tms.parent_id == 12">
      <img src="tms.params.image">
      <div class="card-title">tms.title </div>
      <div class="card-subtitle"></div>
    </ion-card>

  </ion-col>
</ion-row>
  </ion-grid>

在这个 html 中我需要显示一个图像。

【问题讨论】:

有什么可怕的JSON.parse(JSON.stringify())?请张贴result 之前不要对其进行字符串化。如果您按原样收到数据,请修复后端。 【参考方案1】:

您需要直接从结果 json 对象中尝试以下操作

 this.categorydata = this.result.data.data;

【讨论】:

【参考方案2】:

您需要像这样在图像路径之前提供您的基本网址

ts 文件声明基地址

export class HomePage implements OnInit 
 public baseurl='http://baseurl.xyz/';
  constructor(
    public navCtrl: NavController
  ) 

  

然后在你的路径之前添加这个基本 url

<ion-grid>
        <ion-row>
        <ion-col col-6  *ngFor="let tms of categorydata;" (click)="test($event, tms.id)" >

  <ion-card *ngIf="tms.parent_id == 12">
      <img src="baseurl+tms.params.image">
      <div class="card-title">tms.title </div>
      <div class="card-subtitle"></div>
    </ion-card>

  </ion-col>
</ion-row>
  </ion-grid>

它对我有用。

【讨论】:

【参考方案3】:

首先你应该改变你的 ts 来正确处理结果:

您使用的是this.data.data.data,它应该是this.data.data

您应该只解析作为字符串的params 字段

displaycategory()
    this.showLoader();
    this.categories.categorydisplay().then((result) => 
      console.log('result:'+JSON.stringify(result));
      this.loading.dismiss(); 
      this.data = JSON.parse(JSON.stringify(result));
      this.categorydata = this.data.data.map((params, ...rest) => (...rest, params: JSON.parse(params)));

    ), (err) => 
      console.log(err);
      this.loading.dismiss();
    

我认为这样,它应该可以工作。

请记住在下一个问题中详细说明您收到的错误。

【讨论】:

以上是关于如何在循环内显示数组元素的主要内容,如果未能解决你的问题,请参考以下文章

不用循环,python numpy 数组如何对每个元素进行操作?

如何对数组列表的元素求和?

Javascript在循环内推送元素,不会影响循环外的数组

如何在一定范围内创建随机数组

如何在同一个li元素中处理2个嵌套循环而不重复

如何在数组大小更改后刷新 ForEach 显示元素的数量(SwiftUI,Xcode 11 Beta 5)