寻找一个好的答案字符串圆形物体
Looking for a good answer to stringify circular objects
所以我环顾四周,脑子里有很多断开的链接和解释。
我在游戏应用程序中要求这样做,例如,所有者将拥有一个物品,并且该物品也由所有者持有。
我的服务器存储循环引用没有问题。但当客户端第一次登录时,我会将播放器对象发送给客户端。我很难理解如何做到这一点。物品可以由玩家在库存槽中持有,例如玩家将手放在头上。。。一个项目也可能在地面上的x,y位置,我考虑过用某种id作为指针的容器。而不是传递JSON字符串对象。
能够传递循环对象会很好,或者一个简单的函数可以使用Id来引用项目所在的位置。
这是我对解决方案的最佳尝试
//create an object
// run this function
function createRefrence(ref){
container = io.sockets.containersById.push(ref)
io.sockets.containersById[container-1]={ref:ref}
return (container-1)
}
//将返回值存储为对象的属性
简短的答案是不要!循环引用并不能给你带来任何真正的东西。以非圆形的方式表示这类数据有三种基本方法。当你说只有一个id作为指针时,你正朝着正确的方向前进。
我这样做的方式是,而不是试图拥有一个巨大的对象,它包含所有其他对象。它有一个列出用户角色的数据格式,只引用项目,但实际上并没有将它们放在角色的数据结构中。
每个对象都会有一个某种id,然后将两者连接起来。在XML中执行此操作(因为需要更好的语法)可能如下所示。。。
<character>
<possession ref='1' status='worn' />
<possession ref='2' status='inventory' />
</character>
<world>
<item ref='3' xpos='3' ypos='4' />
</world>
<object id='1' name='clothing' hp='12' />
<object id='2' name='gadget' hp='0' />
<object id='3' name='cash' hp='0' />
当你解析它时,你会看到refs将对象连接到角色或世界。因此,当你构建实际的对象时,你会给它们提供彼此的引用。
或者你可以做这样的事情。。。
<character>
<object id='1' name='clothing' hp='12' />
<object id='2' name='gadget' hp='0' />
</character>
<world>
<object id='3' name='cash' hp='0' />
</world>
再次注意,虽然角色拥有的对象是显式的,但另一种方式的链接是隐式的,您的解析器必须知道如何重建它。
或者,你甚至可以做一些类似于链接表的事情,比如SQL,其中连接从其他对象中完全删除并外部化。这种形式的好处是没有任何暗示。双向链接是非常清楚地陈述的,解析器重建它们将非常简单。
<character id='1'>
...
</character>
<object id='1' ... />
<link character='1' object='1' />
当然,相同的语义可以用您选择的格式表示,所以您可以用JSON或您喜欢的格式来表示。
你可能也会发现这很有用,https://stackoverflow.com/a/3341439/51031这为库提供了一些选项,这些库可以被告知排除一些链接,但问题仍然是,当取消序列化时,如何将对象重新缝合在一起。因此,无论如何,你最终都会遗憾地编写一些解析代码!
- 如何在JavaScript中将字符串转换为函数引用
- jQuery中是否内置了任何字符串格式化函数
- Javascript,有没有一种方法可以将数组写成没有逗号或空格的单个文本字符串
- ng打开空字符串
- 正则表达式在字符串中找到base64
- 如何将字符串值从php页面发送到java脚本页面
- 子字符串/正则表达式以获取字符串中保存的 SRC 值
- 字符串在将其传递给另一个活动Android JavaScript时读取Null
- 对id以某个字符串开头的元素进行计数
- Javascript逻辑运算符和字符串/数字
- 反向字符串比较
- 如何有效地将游戏数据存储在URL查询字符串中
- 可变大小的JavaScript字符串如何成为基元类型
- 将DOM节点值与字符串Javascript进行比较
- 寻找一个好的答案字符串圆形物体
- 计算字符串时答案不正确
- 如何遍历数组,随机输出两个字符串,并根据答案执行它们
- 提交表单时,检查文本框是否为某个字符串,并根据答案显示警报
- 如何运行一个程序,直到用户给出一定的答案(字符串+ #)
- 如何检查这些字符串中是否有任何一个存在于另一个字符串中,如果JavaScript中的答案是肯定的,则将其替换