【问题标题】:How to read data from Nested Javascript array如何从嵌套的 Javascript 数组中读取数据
【发布时间】:2019-01-11 05:59:35
【问题描述】:

我正在尝试从 Javascript 数组中读取数据。但是,它说的是未定义。

我的代码是

sabhaDetailsArrayTemp.forEach(element => {
  let arra = [];
  console.log(element)
  //return tmp.m_category_name ;
  arra = this.onSabhaChange(element.sabha_name);
  console.log(arra);
  const sabha_typeOBJ = arra.find(x => x.id == 9);
  console.log(sabha_typeOBJ);
  this.procSabhaDetailsArray.push({ sabha_id: element.sabha_name,
      sabha_type: this.newTMPArray.find(x=>x.id == element.sabha_id),
      followup_id:element.followup_id });
});

我将数组分配给数组。我想提取那个arra 的对象。我尝试使用arra[0] 访问第一个元素然后搜索。但是,它返回:

Error TypeError: Cannot read property find of undefined at 编辑-contact.component.ts:274

【问题讨论】:

  • 快速提醒,您可能希望使用=== 而不是==
  • 使用示例数据创建 sn-p 以重现问题
  • GetSabhaLIstDetailName 调用任何 API?
  • edit-contact.component.ts:274this.newTMPArray 是一个数组吗?
  • this.onSabhaChange(element.sabha_name); 是异步的,它不会立即返回数组,这就是返回数组为空且find 不起作用的原因。您需要返回Observable,然后在subscribe 中填充arra 数组。

标签: javascript arrays json angular


【解决方案1】:

正如 Amardeep 指出的那样,this.onSabhaChange(element.sabha_name); 是异步的,因此 JS 不会等待它完成,它会继续执行下一行代码(JS 本质上是异步的)。

您需要等待执行下一行,直到您的服务返回数据。

您可以使用 Promises 来实现。在您的代码中进行以下重构:

// do following change

onSabhaChange(x) {
    return new Promise(resolve => {
       
       this.sabhaapicall().subscribe((result)=>{
       
             /// do manipualtion for temp array  : 
              let temparr = result;
             resolve(temparray);
       });  
    });
  }
 
 // and your method 
 
 getSabhaDetailsArra(arr){
 
 ......
 
  this.onSabhaChange(arr).then(value => {
      console.log(`promise result: ${value}`);
       arra = value;
       
       ........
       
       // further lines of code 
    });
    console.log('I will not wait until promise is resolved');
 
 }
 

【讨论】:

    猜你喜欢
    • 2022-01-20
    • 2018-05-02
    • 2018-08-27
    • 2016-11-04
    • 2019-09-16
    • 2022-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多