forEach is not a function error with JavaScript array

前端 未结 11 584
梦毁少年i
梦毁少年i 2020-11-29 17:11

I\'m trying to make a simple loop:

const parent = this.el.parentElement
console.log(parent.children)
parent.children.forEach(child => {
  console.log(chil         


        
11条回答
  •  忘掉有多难
    2020-11-29 18:01

    First option: invoke forEach indirectly

    The parent.children is an Array like object. Use the following solution:

    const parent = this.el.parentElement;
    
    Array.prototype.forEach.call(parent.children, child => {
      console.log(child)
    });
    

    The parent.children is NodeList type, which is an Array like object because:

    • It contains the length property, which indicates the number of nodes
    • Each node is a property value with numeric name, starting from 0: {0: NodeObject, 1: NodeObject, length: 2, ...}

    See more details in this article.


    Second option: use the iterable protocol

    parent.children is an HTMLCollection: which implements the iterable protocol. In an ES2015 environment, you can use the HTMLCollection with any construction that accepts iterables.

    Use HTMLCollection with the spread operatator:

    const parent = this.el.parentElement;
    
    [...parent.children].forEach(child => {
      console.log(child);
    });
    

    Or with the for..of cycle (which is my preferred option):

    const parent = this.el.parentElement;
    
    for (const child of parent.children) {
      console.log(child);
    }
    

提交回复
热议问题