Javascript 反对。js未正确返回
在objective.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
[
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补充了一个答案,并做了一些解释。