如何在Typescript中将循环对象转换为字符串?

3

我试图在TypeScript中将循环对象转换为字符串。这是我的原始代码和错误信息:

app.component.ts:

updateList(list: any) {
    this.demolist = Array.apply(this, list);
    console.log('List - ' + JSON.stringify(this.demolist));
}

类型错误:循环对象值

然后,我在我的updateList()方法中尝试了以下代码:

const getCircularReplacer = () => {
      const seen = new WeakSet();
      return (key, value) => {
        if (typeof value === "object" && value !== null) {
          if (seen.has(value)) {
            return;
          }
          seen.add(value);
        }
        return value;
      };
    };
      console.log(JSON.stringify(this.demolist, getCircularReplacer()));
}

但现在我遇到了这个错误:

TypeError: toISOString属性不可调用

请问有没有人能告诉我需要做哪些更改才能显示this.listBase的内容?

以下是我的HTML代码:

<upload #fileUpload (listChange)="updateList($event)" data-kind="primary" restrictFiles=".pdf,.doc,.docx">
</upload>

<list #listBase [IncludeComponent]="inputComponent" [list]="demolist">    
</list>

如果您能展示出现错误的代码会更有帮助...请查看[mcve]的构成以获取更多信息。我现在的猜测是,您使用了Date对象进行了一些奇怪的操作。 - jcalz
@jcalz 第一个错误出现在 JSON.stringify(this.listBase),因为它试图序列化一个循环对象。console.log(JSON.stringify(this.listBase, getCircularReplacer())); 是新错误发生的地方。 - user9847788
1
我不确定你遇到的错误是否直接与你的替换函数有关,但可能与列表中的内容有关。你能否提供一下这个 this.demoList 长什么样子的例子? - Marcus
1个回答

1
您遇到的错误是:
类型错误:toISOString属性不可调用
这意味着某个对象的名为“toISOString”的属性被当作方法调用了。例如:
someObj.toISOString();

唯一已知的内置且命名为toISOString的JavaScript方法是Date.prototype.toISOStringJSON.stringify()了解一些标准值类型以及如何将它们转换(序列化)为字符串。它通常通过调用预期存在的toString()方法来完成这一点。它还知道Date对象具有toISOString()方法,并在找到该方法时调用它。因此,在这种情况下,我假设JSON.stringify()遇到一个对象,尽管它是Date类型,但它有一个定义的属性名为toISOString(而不是方法),它覆盖了现有的Date.prototype.toISOString(),此时它试图将其作为方法调用,从而导致错误。
我无法猜测在您的特定情况下哪个对象是这样的,因此建议您逐个检查所有位于this.demoList中的对象(及其子对象),使用浏览器的开发者工具找出哪个是"有问题"的对象。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接