如何创建自定义迭代器来跳过 Javascript 中的空值

问题描述 投票:0回答:2

Javascript 中的自定义迭代器

嗨, 我想创建一个覆盖

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
  }

这是我开始的地方:用类定义可迭代对象

您能帮我为我的用例起草解决方案吗?

谢谢!

javascript iterator javascript-objects
2个回答
1
投票

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
}


0
投票

ECMAScript 2025 引入了

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

© www.soinside.com 2019 - 2024. All rights reserved.