gpt4 book ai didi

javascript - Objection.js 未正确返回

转载 作者:行者123 更新时间:2023-12-02 22:14:27 30 4
gpt4 key购买 nike

在 objection.js 中 insertgraph 之后我没有得到正确的返回

我得到的结果如下:

[
User {
name: 'Santosh Devi',
city: 'Suratgarh',
number: '9898987458',
userroles: UserRoles { role_id: 2, user_id: 37 },
id: 37
}
]

我想要的结果如下:

[
{
name: 'Santosh Devi',
city: 'Suratgarh',
number: '9898987458',
userroles: { role_id: 2, user_id: 37 },
id: 37
}
]

最佳答案

有几种方法可以摆脱特定的类引用:

1。 JSON.parse(JSON.stringify(结果))

这将通过首先将整个对象转换为字符串(JSON 格式)来重建对象,然后执行相反的操作 - 从字符串创建一个新对象。由于此字符串格式(JSON)不存储自定义类信息,因此它达到了您的目的。但是,如果您的对象具有函数、符号,那么这些将被省略。 MapSet 也将变成空对象。如需更完整的限制列表。请参阅JSON.stringify

2。深度克隆

有几个深度克隆函数,它们可能会或可能不会达到您的预期。有些人仍然会尝试保留原始原型(prototype)引用,这样对您没有好处。您可以在这里找到一些:How to Deep clone in javascript 。对于您的情况,这个可以完成这项工作:

function deepClone(obj, hash = new WeakMap()) {
if (Object(obj) !== obj) return obj; // primitives
if (hash.has(obj)) return hash.get(obj); // cyclic reference
const result = Array.isArray(obj) ? [] : {};
hash.set(obj, result);
return Object.assign(result, ...Object.keys(obj).map(
key => ({ [key]: deepClone(obj[key], hash) }) ));
}

您将其称为newResult = deepClone(result)

这里的优点是它支持循环引用,这是 JSON.stringify 无法处理的。此外,没有发生字符串转换,这实际上是没有必要的。您可以扩展此函数以继续处理您希望保持这种状态的一些类实例。了解如何支持 Date、RegExp、Map、Set 等,参见 this answer 。但不要采取“包罗万象”的做法。

3。更改原型(prototype)

使用此策略,您可以就地改变结果。

function removeClasses(obj, hash = new WeakSet()) {
if (Object(obj) !== obj) return; // primitives
if (hash.has(obj)) return; // cyclic reference
hash.add(obj);
if (Array.isArray(obj)) Object.setPrototypeOf(obj, Array.prototype);
else Object.setPrototypeOf(obj, Object.prototype);
for (let value of Object.values(obj)) {
removeClasses(value, hash);
}
}

将其称为removeClasses(result),之后result将被“修复”。同样,此方法不使用到字符串的转换。由于它也不创建新对象,因此消耗更少的内存。但另一方面,你会改变一个对象,有些人会建议不要这样做。

关于javascript - Objection.js 未正确返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59435892/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com