首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Objection.js不适当返回

Objection.js不适当返回
EN

Stack Overflow用户
提问于 2019-12-21 11:45:10
回答 1查看 484关注 0票数 0

在objection.js中插入图后的返回是不正确的

我得到的结果是:

代码语言:javascript
复制
[
  User {
    name: 'Santosh Devi',
    city: 'Suratgarh',
    number: '9898987458',
    userroles: UserRoles { role_id: 2, user_id: 37 },
    id: 37
  }
]

我想要的结果是:

代码语言:javascript
复制
[
  {
    name: 'Santosh Devi',
    city: 'Suratgarh',
    number: '9898987458',
    userroles: { role_id: 2, user_id: 37 },
    id: 37
  }
]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-21 13:27:41

有几种方法可以消除特定的类引用:

1. JSON.parse(JSON.stringify(result))

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

2.深克隆人

有几个深克隆函数存在,这些函数可能做你想做的,也可能做不到。有些人仍然会尝试维护原始的原型引用,这样你就不会从中受益。你可以在这里找到一些:如何在javascript中实现深度克隆。就你的情况而言,这个人会做好以下工作:

代码语言: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无法处理这些引用。此外,没有发生字符串转换,这实际上是不必要的。您可以扩展此函数,以处理某些您喜欢保持这种方式的类实例。看看你如何支持日期,RegExp,地图,集合,.在这个答案中。但不要做“无话可说”的话。

3.改变原型

有了这个策略,你就会改变结果。

代码语言:javascript
复制
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就被“修正”了。同样,此方法不使用对字符串的转换。由于它也不创建新对象,因此消耗的内存较少。但另一方面,你变异了一个物体,有些人会建议你不要那样做。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59435892

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档