Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 反对。js未正确返回_Javascript_Express_Objection.js - Fatal编程技术网

Javascript 反对。js未正确返回

Javascript 反对。js未正确返回,javascript,express,objection.js,Javascript,Express,Objection.js,在objective.js中插入图表后,我没有得到正确的返回 我得到的结果如下: [ User { name: 'Santosh Devi', city: 'Suratgarh', number: '9898987458', userroles: UserRoles { role_id: 2, user_id: 37 }, id: 37 } ] [ { name: 'Santosh Devi', city: 'Suratgar

在objective.js中插入图表后,我没有得到正确的返回

我得到的结果如下:

[
  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
  }
]
我希望得到如下结果:

[
  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(result))
这将通过首先将整个对象转换为字符串(JSON格式)来重建对象,然后执行相反的操作——从字符串创建新对象。由于此字符串格式(JSON)不存储自定义类信息,因此它可以达到您的目的。但是,如果对象具有函数、符号,则这些将被忽略。此外,
Map
Set
将成为空对象。查看更完整的限制列表。看

2.深层克隆 有几个深层克隆函数,它们可能会或可能不会实现您所期望的功能。有些人仍然会试图维护原始的原型引用,这样对您没有好处。你可以在这里找到一些:。对于您的情况,这一个可以完成以下任务:

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.改变原型 有了这个策略,你就可以在适当的地方改变结果


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

你可以做
JSON.parse(JSON.stringify(result))
将对象转换成普通对象,虽然a也可以在不需要临时转换为字符串的情况下完成这项工作。但有人可能会问:为什么这对你来说很重要?我能知道它们之间的区别吗?trincotI补充了一个答案,并做了一些解释。