迭代嵌套的类对象

时间:2018-04-12 22:00:19

标签: javascript

我有一个看起来像这样的课程:

class Item {
    constructor (color, size) {
        this._color = color
        this._size = size
    }

    get color() {
        return this._color
    }

我实例化一个基本项目:

const pencil = new Item('yellow', 6)

然后我实例化几个子项:

pencil.eraser = new Item('red', 2)
pencil.lead = new Item('grey', 1)

我想以某种方式遍历每个子项目。

var colors = [];

pencil.forEach(part => {
    colors.push(part.color)
}
console.log(colors) //expected output: red, grey

这样的事情会很好,但我知道这是不可能的。

2 个答案:

答案 0 :(得分:2)

您可以将对象属性的所有值.filter()缩小为instanceof Item,然后将.map()变为其颜色。



class Item {
    constructor (color, size) {
        this._color = color
        this._size = size
    }

    get color() {
        return this._color
    }
}

const pencil = new Item('yellow', 6)

pencil.eraser = new Item('red', 2)
pencil.lead = new Item('grey', 1)

var colors = Object.values(pencil)
                   .filter(v => v instanceof Item)
                   .map(p => p.color);
   
console.log(colors)




答案 1 :(得分:0)

for ... in循环允许您遍历对象属性。然后,您可以检查它们是否是Item类的实例。

class Item {
    constructor (color, size) {
        this._color = color
        this._size = size
    }

    get color() {
        return this._color
    }
}

const pencil = new Item('yellow', 6)

pencil.eraser = new Item('red', 2)
pencil.lead = new Item('grey', 1)

var colors = [];

for (let item in pencil) {
   if (pencil[item] instanceof Item) {
      colors.push(pencil[item].color);
   }
}

console.log(colors) //expected output: red, grey