嗨, 我想创建一个覆盖
Symbol.iterator
的 Javascript 类,以便跳过 null
或 undefined
的数据。
const simple = new SimpleClass([
{
fields: `a`,
},
{
fields: `b`,
},
{
fields: undefined,
},
{
fields: null,
},
{
fields: `e`,
},
]);
for (const val of simple) {
console.log(val); // a b e
}
这是我开始的地方:用类定义可迭代对象
您能帮我为我的用例起草解决方案吗?
谢谢!
class SimpleClass {
#items
constructor(items) {
this.#items = items
}
*[Symbol.iterator]() {
for (const item of this.#items) {
if (item.fields !== null && item.fields !== undefined) {
yield item.fields
}
}
}
}
const simple = new SimpleClass([{
fields: `a`,
},
{
fields: `b`,
},
{
fields: undefined,
},
{
fields: null,
},
{
fields: `e`,
},
]);
for (const val of simple) {
console.log(val); // a b e
}
map
和 filter
迭代器辅助方法,因此您可以执行以下操作:
class SimpleClass {
#items
constructor(items) {
this.#items = items
}
[Symbol.iterator]() {
return this.#items.values()
.map(o => o.fields)
.filter(val => val != null);
}
}
const simple = new SimpleClass([
{ fields: `a` },
{ fields: `b` },
{ fields: undefined },
{ fields: null },
{ fields: `e` },
]);
console.log(...simple); // a b e