foreach在JavaScript类方法中未定义

发布于 2025-01-26 20:39:02 字数 5224 浏览 5 评论 0原文

我的代码有问题。经过多次搜索解决方案的尝试,我决定从Stackoverflow社区获得帮助

,我创建了一个JavaScript类,以供GET注册成员列表。该成员寄存器本地将其本地化为已有访问的系统的JSON文件。

我正在尝试通过foreach使用数组数据过滤器。但是,该方法命名为:“(教堂名称)”,请勿阅读任何foreach方法。当我使用()中时,返回未定义。

最初,我在方法“ createMemblist()”中使用了“返回”响应,负责创建完整的数组。这种方法正常工作。但是,使用“返回”在变量中使用foreach方法不起作用。然后,由于这个平均错误,我使用了“此操作员”而不是“返回”。但是,即使如此,正如您在代码中可以看到的那样,我也无法使用“ createMemblist()”的foreach方法。 有人有任何想法吗?

细节: 我的ardy使用了该网站提示: https://wwww.techiedelight.com/copy-copy-elements -array-Into-Another-array-javascript/

   const $INIT = {
        GetMembers: class{
            #listaOrdenadaItens;
            #listaMembros;
            #MemberListOfChurch;
            membersList;
            #linkGFile="LinkToJsonFileHere";
            /*Returns:
   {
         "range": "Membros!B5:AB234",
         "majorDimension": "ROWS",
         "values": [
        
            [ "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              ""]
         ]
    }

 */
            constructor(ListFromGD){
                if(typeof ListFromGD!=="undefined"&&ListFromGD!==null){
                    this.#linkGFile=ListFromGD;
                }
                this.#createMemberList();
            }
            /*Members List*/
            Of(ChurchName){
                /**Filters member data according congregation
                 * Usage: new $INIT.GetMembers().Of("ChurchName")
                 */
                this.#MemberListOfChurch=[];;
                this.ChurchName=ChurchName;
                    
                this.membersList.forEach((item, count) => {
                 console.log("Why this code don't appears in console?");
                    if (/^[a-zA-Z_À-Úà-ú\s]{2,50}$/.test(ChurchName)==true && ChurchName.toLocaleLowerCase() == item.congregacao.toLocaleLowerCase()) {
                        
                        this.#MemberListOfChurch[count] = item;
                    }else{
                        console.log("Trys to check anyone error");
                    }
    
                }); 
                 
                return this.#MemberListOfChurch;
            }
            #getListaOrdenada (){
               return [
                   /**Personal Informations */
                   "Nome Completo",
                   "Sexo",
                   "CPF",
                   "Data de Nascimento",
                   "RG",
                   "Orgão Emissor",
                   "UF_RG",
                   "Data de Expedição",
                   "Estado Civil",
                   "CONJUGE",
                   "Naturalidade",
                   "UF_NAT",
                   "NOME_PAI",
                   "NOME_MAE",
    
                   /**Schooling and ecclesiastical data */
                   "GRAU_INSTRUCAO",
                   "PROFISSAO",
                   "FUNCAO_ECLESIASTICA",
                   "LOCAL",
                   "UF_BATISMO",
    
                   /**Address informations */
                   "Endereco",
                   "cep",
                   "bairro",
                   "cidade",
                   "uf",
                   "congregacao",
                   "contact_number",
                   "whatsapp_number"
    
               ]
            }
            #createMemberList(){
                var listaOrdenada = this.#getListaOrdenada();
    
                /**Create an array */
                var NewListMember = [];
                
                var DadosMembros={};
                /**
                 * Gets registered members list at system!
                 */
                this.#getJSON(this.#linkGFile).then(response=>{
                    response.values.forEach((item, i)=>{
                        /**Examina membro por membro aqui */
                        if(item[0]===undefined)return;

                        /**Creates a name for array of values: Ex: {"Complete Name" : "Leonardo Lima de Sousa"} */
                        listaOrdenada.forEach((ItemName,N)=>{
                            if(ItemName===undefined) return;
                            DadosMembros[ItemName]=item[N];
                        });
                        
            
                         NewListMember[i] = DadosMembros;
                         DadosMembros={};
                    });
                })
    
                this.membersList=NewListMember;
            }
    
            #getJSON=async t=>{const r=await fetch(t);if(!r.ok)throw new Error(r.statusText);return r.json()};
            
    
        }
    }

如果我直接在Chrome Console中运行此功能的代码,则可以。

I are have a problem into my code. After many attempts in search for solutions I decided to get help from the stackoverflow community

I have created a Javascript Class for get registered members list. This members register is localized in to a Json file which system have access.

I'm trying to use an array data filter through forEach. But the method named: "Of(ChurchName)" don't read any foreach method into it. When I using into Of(), returns undefined.

Initially I used 'return' response in the method "createMemberList()", responsible to create the full array. This method it's working normally. But, using 'return' in a variable with ForEach method not work. Then, because this aparent error, I has used the 'this' operator instead of 'return'. But even so, as can you see in code, i can't use the forEach method at "createMemberList()".
Does anyone has any idea?

Details:
I aredy used that site tips:
https://www.techiedelight.com/copy-elements-array-into-another-array-javascript/

   const $INIT = {
        GetMembers: class{
            #listaOrdenadaItens;
            #listaMembros;
            #MemberListOfChurch;
            membersList;
            #linkGFile="LinkToJsonFileHere";
            /*Returns:
   {
         "range": "Membros!B5:AB234",
         "majorDimension": "ROWS",
         "values": [
        
            [ "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              "",
              ""]
         ]
    }

 */
            constructor(ListFromGD){
                if(typeof ListFromGD!=="undefined"&&ListFromGD!==null){
                    this.#linkGFile=ListFromGD;
                }
                this.#createMemberList();
            }
            /*Members List*/
            Of(ChurchName){
                /**Filters member data according congregation
                 * Usage: new $INIT.GetMembers().Of("ChurchName")
                 */
                this.#MemberListOfChurch=[];;
                this.ChurchName=ChurchName;
                    
                this.membersList.forEach((item, count) => {
                 console.log("Why this code don't appears in console?");
                    if (/^[a-zA-Z_À-Úà-ú\s]{2,50}$/.test(ChurchName)==true && ChurchName.toLocaleLowerCase() == item.congregacao.toLocaleLowerCase()) {
                        
                        this.#MemberListOfChurch[count] = item;
                    }else{
                        console.log("Trys to check anyone error");
                    }
    
                }); 
                 
                return this.#MemberListOfChurch;
            }
            #getListaOrdenada (){
               return [
                   /**Personal Informations */
                   "Nome Completo",
                   "Sexo",
                   "CPF",
                   "Data de Nascimento",
                   "RG",
                   "Orgão Emissor",
                   "UF_RG",
                   "Data de Expedição",
                   "Estado Civil",
                   "CONJUGE",
                   "Naturalidade",
                   "UF_NAT",
                   "NOME_PAI",
                   "NOME_MAE",
    
                   /**Schooling and ecclesiastical data */
                   "GRAU_INSTRUCAO",
                   "PROFISSAO",
                   "FUNCAO_ECLESIASTICA",
                   "LOCAL",
                   "UF_BATISMO",
    
                   /**Address informations */
                   "Endereco",
                   "cep",
                   "bairro",
                   "cidade",
                   "uf",
                   "congregacao",
                   "contact_number",
                   "whatsapp_number"
    
               ]
            }
            #createMemberList(){
                var listaOrdenada = this.#getListaOrdenada();
    
                /**Create an array */
                var NewListMember = [];
                
                var DadosMembros={};
                /**
                 * Gets registered members list at system!
                 */
                this.#getJSON(this.#linkGFile).then(response=>{
                    response.values.forEach((item, i)=>{
                        /**Examina membro por membro aqui */
                        if(item[0]===undefined)return;

                        /**Creates a name for array of values: Ex: {"Complete Name" : "Leonardo Lima de Sousa"} */
                        listaOrdenada.forEach((ItemName,N)=>{
                            if(ItemName===undefined) return;
                            DadosMembros[ItemName]=item[N];
                        });
                        
            
                         NewListMember[i] = DadosMembros;
                         DadosMembros={};
                    });
                })
    
                this.membersList=NewListMember;
            }
    
            #getJSON=async t=>{const r=await fetch(t);if(!r.ok)throw new Error(r.statusText);return r.json()};
            
    
        }
    }

If I run this code of this function directly in the Chrome Console, it's works. But in this Class Method, returns undefined

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

烟织青萝梦 2025-02-02 20:39:02

const newarr = [... arr1,... arr2]将将所有元素从arr1和arr2复制到newarr。您不需要使用foreach

const newArr = [...arr1, ...arr2] will copy all the elements from arr1 and arr2 to newArr. You don't need to use foreach.

心如狂蝶 2025-02-02 20:39:02

临时解决方案

解决此问题的临时解决方案是复制createMemblist() content to()方法。此后,有必要创建一个名为newlistmember []的新数组,并通过对象应用会众名称为均等的churchname param param

()方法将保持此信息:

Of(ChurchName){
            /**Filters member data according congregation
                 * Usage: new $INIT.GetMembers().Of("ChurchName")
                 */
            
            var 
                listaOrdenada   =   this.#getListaOrdenada(),
                NewListMember   =   [], 
                newArray        =   [],
                DadosMembros    =   {};
            /**
             * Gets all registered members data by Json array.
             */
            this.#getJSON(this.#linkGFile).then(response=>{
                //Creates a counter variable
                var newI=0;
                
                response.values.forEach((item, i)=>{
                    /**examines member by member here */
                    if(item[0]===undefined)return;
                    
                    /**Creates a property name for this array value: }
                      *Ex: {"Nome completo" : "Leonardo Lima de Sousa"} 
                      *     "Complete Name"
                    */
                    listaOrdenada.forEach((ItemName,N)=>{
                        if(ItemName===undefined) return;
                        DadosMembros[ItemName]=item[N];
                    });

                    //Gets current congregation name and set all letters to lowerCase()
                    var ThisCongregation        = DadosMembros.congregacao;ThisCongregation=ThisCongregation.toLowerCase();
                    
                    //Gets congregation name in to param: ChurchName and set all letters to lowerCase()
                    var CongregationIndicate    = ChurchName.toLowerCase();

                    //Gets Congregation where Congregation name is equal Param ChurchName
                    ////Then, creates a new size for array NewListMember with newI counter
                    if(ThisCongregation!==undefined&&ThisCongregation!==CongregationIndicate)return;
                     NewListMember[newI] = DadosMembros;
                     ++newI;
                     DadosMembros={};
                });
            });
            return NewListMember
        }

TEMPORARY SOLUTION

A temporary solution for this problem is copy CreateMemberList() content to Of() Method. Thereafter, It's necessary create a new Array named NewListMember[] and apply congregations data via objects to it where congregation name is equal ChurchName param

The Of() Method will be staying this:

Of(ChurchName){
            /**Filters member data according congregation
                 * Usage: new $INIT.GetMembers().Of("ChurchName")
                 */
            
            var 
                listaOrdenada   =   this.#getListaOrdenada(),
                NewListMember   =   [], 
                newArray        =   [],
                DadosMembros    =   {};
            /**
             * Gets all registered members data by Json array.
             */
            this.#getJSON(this.#linkGFile).then(response=>{
                //Creates a counter variable
                var newI=0;
                
                response.values.forEach((item, i)=>{
                    /**examines member by member here */
                    if(item[0]===undefined)return;
                    
                    /**Creates a property name for this array value: }
                      *Ex: {"Nome completo" : "Leonardo Lima de Sousa"} 
                      *     "Complete Name"
                    */
                    listaOrdenada.forEach((ItemName,N)=>{
                        if(ItemName===undefined) return;
                        DadosMembros[ItemName]=item[N];
                    });

                    //Gets current congregation name and set all letters to lowerCase()
                    var ThisCongregation        = DadosMembros.congregacao;ThisCongregation=ThisCongregation.toLowerCase();
                    
                    //Gets congregation name in to param: ChurchName and set all letters to lowerCase()
                    var CongregationIndicate    = ChurchName.toLowerCase();

                    //Gets Congregation where Congregation name is equal Param ChurchName
                    ////Then, creates a new size for array NewListMember with newI counter
                    if(ThisCongregation!==undefined&&ThisCongregation!==CongregationIndicate)return;
                     NewListMember[newI] = DadosMembros;
                     ++newI;
                     DadosMembros={};
                });
            });
            return NewListMember
        }
梓梦 2025-02-02 20:39:02

确定的解决方案

问题在哪里?
什么是解决方案?
#CreateMemblist()生成一个超过220行的数组。然后,有必要等待()方法来处理所有内容。
为此,必须在方法中使用settimeout()函数,因此:

setTimeout(()=>{
    console.log(JSON.stringify(this.membersList))
},3000)

代码将像这样保持:

     const $INIT = {
            GetMembers: class{
                #listaOrdenadaItens;
                #listaMembros;
                #MemberListOfChurch;
                membersList;
    #linkGFile="https://cdn.jsdelivr.net/gh/OficialLeonardoLima/cdn@main/json_test.json";
         
                constructor(ListFromGD){
                    if(typeof ListFromGD!=="undefined"&&ListFromGD!==null){
                        this.#linkGFile=ListFromGD;
                    }
                    this.#createMemberList();
                  setTimeout(()=>{
                    console.log(JSON.stringify(this.membersList))
                  },3000)
                  
                  document.querySelector("#console").text=JSON.stringify(this.membersList)
                }
                /*Members List*/
                Of(ChurchName){
                    /**Filters member data according congregation
                     * Usage: new $INIT.GetMembers().Of("ChurchName")
                     */
                    this.#MemberListOfChurch=[];;
                    this.ChurchName=ChurchName;
                    
setTimeout(()=>{   
this.membersList.forEach((item, count) => {
                 console.log("Why this code don't appears in console?");
                    if (/^[a-zA-Z_À-Úà-ú\s]{2,50}$/.test(ChurchName)==true && ChurchName.toLocaleLowerCase() == item.congregacao.toLocaleLowerCase()) {
                        
                        this.#MemberListOfChurch[count] = item;
                    }else{
                        console.log("Trys to check anyone error");
                    }
    
                }); 
                                         },3000);
                     
                    return this.#MemberListOfChurch;
                }
                #getListaOrdenada (){
                   return [
                       /**Personal Informations */
                       "Nome Completo",
                       "Sexo",
                       "CPF",
                       "Data de Nascimento",
                       "RG",
                       "Orgão Emissor",
                       "UF_RG",
                       "Data de Expedição",
                       "Estado Civil",
                       "CONJUGE",
                       "Naturalidade",
                       "UF_NAT",
                       "NOME_PAI",
                       "NOME_MAE",
        
                       /**Schooling and ecclesiastical data */
                       "GRAU_INSTRUCAO",
                       "PROFISSAO",
                       "FUNCAO_ECLESIASTICA",
                       "LOCAL",
                       "UF_BATISMO",
        
                       /**Address informations */
                       "Endereco",
                       "cep",
                       "bairro",
                       "cidade",
                       "uf",
                       "congregacao",
                       "contact_number",
                       "whatsapp_number"
        
                   ]
                }
                #createMemberList(){
                    var listaOrdenada = this.#getListaOrdenada();
        
                    /**Create an array */
                    var NewListMember = [];
                    
                    var DadosMembros={};
                    /**
                     * Gets registered members list at system!
                     */
                    this.#getJSON(this.#linkGFile).then(response=>{
                        response.values.forEach((item, i)=>{
                            /**Examina membro por membro aqui */
                            if(item[0]===undefined)return;
    
                            /**Creates a name for array of values: Ex: {"Complete Name" : "Leonardo Lima de Sousa"} */
                            listaOrdenada.forEach((ItemName,N)=>{
                                if(ItemName===undefined) return;
                                DadosMembros[ItemName]=item[N];
                            });
                            
                
                             NewListMember[i] = DadosMembros;
                             DadosMembros={};
                        });
                    })
        
                    this.membersList=NewListMember;
                }
        
                #getJSON=async t=>{const r=await fetch(t);if(!r.ok)throw new Error(r.statusText);return r.json()};
                
        
            }
        }
    

DEFINITIVE SOLUTION

where were problem?
What's solution?
The #createMemberList() generate an array with more than 220 rows. Then, it's necessary wait a while for Of() method to process everything.
For it, it's must to use setTimeout() function in the method, like this:

setTimeout(()=>{
    console.log(JSON.stringify(this.membersList))
},3000)

The code will to stay like this:

     const $INIT = {
            GetMembers: class{
                #listaOrdenadaItens;
                #listaMembros;
                #MemberListOfChurch;
                membersList;
    #linkGFile="https://cdn.jsdelivr.net/gh/OficialLeonardoLima/cdn@main/json_test.json";
         
                constructor(ListFromGD){
                    if(typeof ListFromGD!=="undefined"&&ListFromGD!==null){
                        this.#linkGFile=ListFromGD;
                    }
                    this.#createMemberList();
                  setTimeout(()=>{
                    console.log(JSON.stringify(this.membersList))
                  },3000)
                  
                  document.querySelector("#console").text=JSON.stringify(this.membersList)
                }
                /*Members List*/
                Of(ChurchName){
                    /**Filters member data according congregation
                     * Usage: new $INIT.GetMembers().Of("ChurchName")
                     */
                    this.#MemberListOfChurch=[];;
                    this.ChurchName=ChurchName;
                    
setTimeout(()=>{   
this.membersList.forEach((item, count) => {
                 console.log("Why this code don't appears in console?");
                    if (/^[a-zA-Z_À-Úà-ú\s]{2,50}$/.test(ChurchName)==true && ChurchName.toLocaleLowerCase() == item.congregacao.toLocaleLowerCase()) {
                        
                        this.#MemberListOfChurch[count] = item;
                    }else{
                        console.log("Trys to check anyone error");
                    }
    
                }); 
                                         },3000);
                     
                    return this.#MemberListOfChurch;
                }
                #getListaOrdenada (){
                   return [
                       /**Personal Informations */
                       "Nome Completo",
                       "Sexo",
                       "CPF",
                       "Data de Nascimento",
                       "RG",
                       "Orgão Emissor",
                       "UF_RG",
                       "Data de Expedição",
                       "Estado Civil",
                       "CONJUGE",
                       "Naturalidade",
                       "UF_NAT",
                       "NOME_PAI",
                       "NOME_MAE",
        
                       /**Schooling and ecclesiastical data */
                       "GRAU_INSTRUCAO",
                       "PROFISSAO",
                       "FUNCAO_ECLESIASTICA",
                       "LOCAL",
                       "UF_BATISMO",
        
                       /**Address informations */
                       "Endereco",
                       "cep",
                       "bairro",
                       "cidade",
                       "uf",
                       "congregacao",
                       "contact_number",
                       "whatsapp_number"
        
                   ]
                }
                #createMemberList(){
                    var listaOrdenada = this.#getListaOrdenada();
        
                    /**Create an array */
                    var NewListMember = [];
                    
                    var DadosMembros={};
                    /**
                     * Gets registered members list at system!
                     */
                    this.#getJSON(this.#linkGFile).then(response=>{
                        response.values.forEach((item, i)=>{
                            /**Examina membro por membro aqui */
                            if(item[0]===undefined)return;
    
                            /**Creates a name for array of values: Ex: {"Complete Name" : "Leonardo Lima de Sousa"} */
                            listaOrdenada.forEach((ItemName,N)=>{
                                if(ItemName===undefined) return;
                                DadosMembros[ItemName]=item[N];
                            });
                            
                
                             NewListMember[i] = DadosMembros;
                             DadosMembros={};
                        });
                    })
        
                    this.membersList=NewListMember;
                }
        
                #getJSON=async t=>{const r=await fetch(t);if(!r.ok)throw new Error(r.statusText);return r.json()};
                
        
            }
        }
    
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文