【问题标题】:typescript / angular 6 : looping/mapping an Array<any> to Array<MyClass>typescript / angular 6:循环/映射 Array<any> 到 Array<MyClass>
【发布时间】:2019-06-22 00:23:47
【问题描述】:

女孩和男孩,我多次为同一个问题苦苦挣扎。

我使用这个请求:

const url = this.getTheRightEndpoint(tag.name);
        this.httpClient.post(url, this.report, { headers: new HttpHeaders({ 'Authorization': 'BEARER ' + this.auth.getUserSession().access_token }), responseType: 'json'}).subscribe((data: Array<string>)  => {

      console.log(data);    
      console.log(JSON.parse(data));


    });
  }

在我获得的第一个控制台日志中:

[{"BackOrder":"0","BadAddress":"0","CalculatePerfectCompletationTotal":"100 %","CancelByCustomer":"0","Completed":"4","CustomerRelatedException":"0 %","Damage":"0","DeliveryRelatedException":"0 %","DriverName":"Rolly's Transfer","FillRate":"100 %","NoFit":"0","NotAtHome":"0","OrderWithError":"0","PathNotClear":"0","PerfectCompletedStop":"4","PickupDate":"2018-12-04","PlannedStop":"4","Rescheduled":"0","RouteDelay":"0","RouteName":"","TruckNumber":"401","UnableReachCustomer":"0","UnfilteredPlannedStop":"4","Unknown":"0","WrongDate":"0"}]

我尝试像这样解析它(第二个 consol.log):console.log(JSON.parse(data)); 我得到:

0: {BackOrder: "0", BadAddress: "0", CalculatePerfectCompletationTotal: "100 %", CancelByCustomer: "0", Completed: "4", …}
1: {BackOrder: "0", BadAddress: "0", CalculatePerfectCompletationTotal: "100 %", CancelByCustomer: "0", Completed: "4", …}
2: {BackOrder: "0", BadAddress: "0", CalculatePerfectCompletationTotal: "83 %", CancelByCustomer: "0", Completed: "6", …}

等等……

但我的目标是遍历这个对象以达到每个“行”的属性......但我不能......我已经尝试了许多使用 foreach 循环的示例,但响应是 data.foreach 是不是函数...所以我迷路了,因为我的编辑提出了 foreach 函数。

谁能帮帮我? 谢谢。

【问题讨论】:

    标签: arrays typescript loops angular6


    【解决方案1】:

    一种奇怪的行为。您的第一个输出看起来像一个数组,但“data.foreach 不是一个函数”让我认为 data 不是 Array.prototype 实例。您可以尝试JSON.parse(JSON.stringify(data)) 让 JSON 库将您的数据变异为数组,然后映射它。尝试这样的事情:

    this.httpClient.post(...args).subscribe(data => {
          let _data = JSON.parse(JSON.stringify(data)).map(row => Object.values(row));
          console.log(_data);
        });
      }
    

    这是一个丑陋的解决方法,但我希望它会有所帮助

    【讨论】:

    • data.foreach() 当然不是一个函数。 data.forEach() 是
    【解决方案2】:

    你可以这样做:

    let json = JSON.parse(data);
    json.forEach((v) => { console.log(v); });
    

    如果数据是一个对象数组,那么:

    let json = [];
    JSON.parse(data).forEach((v) => { json.push(v); });
    json.forEach((v) => { console.log(v); });
    

    【讨论】:

    • 谢谢阿文女士。 (我不再是办公室,所以我要到明天才能尝试)。我会告诉你这是否有效。
    【解决方案3】:

    我已将其分解为以下最简单的形式,我们循环遍历标准数组,然后从对象中提取数据:-

    我刚刚为您提取了对象的 Completed 部分,以便您了解如何操作。

    let data = [
      {BackOrder: "0", BadAddress: "0", CalculatePerfectCompletationTotal: "100 %", CancelByCustomer: "0", Completed: "4"},
      {BackOrder: "0", BadAddress: "0", CalculatePerfectCompletationTotal: "100 %", CancelByCustomer: "0", Completed: "4"},
      {BackOrder: "0", BadAddress: "0", CalculatePerfectCompletationTotal: "83 %", CancelByCustomer: "0", Completed: "6"}]
      
      for (let i = 0; i < data.length; i++) {
        console.log(data[i].Completed);
      }

    因此,对于您的代码,您需要使用以下脚本:-

    const url = this.getTheRightEndpoint(tag.name);
            this.httpClient.post(url, this.report, { headers: new HttpHeaders({ 'Authorization': 'BEARER ' + this.auth.getUserSession().access_token }), responseType: 'json'}).subscribe((data: Array<object>)  => {
    
          console.log(data);
          
          for (let i = 0; i < data.length; i++) {
            console.log(data[i]. Completed);
          }
    
        });
      }

    还请注意,您从您的 subscribe 返回的 data 应该是 data: Array&lt;object&gt;,因为您将返回一个对象数组而不是字符串。

    【讨论】:

    • 感谢 Hensler Software。 (我不再是办公室,所以我要到明天才能尝试)。我会告诉你这是否有效。
    • 没问题,我注意到您问了很多问题,但没有接受任何答案。如果您通过单击答案旁边的绿色勾号来接受解决您的问题的解决方案,社区将不胜感激。
    猜你喜欢
    • 1970-01-01
    • 2020-03-13
    • 1970-01-01
    • 1970-01-01
    • 2018-07-21
    • 2017-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多