如何从嵌套Javascript数组读取数据

时间:2019-01-11 05:59:36

标签: javascript arrays json angular

我正在尝试从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]访问第一个元素然后进行搜索。但是,它返回:

  

错误TypeError:无法读取位于以下位置的未定义属性   edit-contact.component.ts:274

Trying to read data from array

1 个答案:

答案 0 :(得分:0)

如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');
 
 }