Javascript 使用json对象的邻接列表

Javascript 使用json对象的邻接列表,javascript,json,data-structures,adjacency-list,Javascript,Json,Data Structures,Adjacency List,我想使用json对象创建一个邻接列表。我想用以下格式为邻接列表实现json对象 var JSONobj= {node1:[{x1,y1},{x3,y3},{x4,y4}], node2:[{x2,y2},{x3,y3}], node3:[]} 我的疑问是,我是否可以动态地向坐标列表添加值,例如JSONobj.node3[0]={x4,y4}? 或者有没有更好的方法从对象声明之外向JSONobj添加值?您可以将元素推入JSON对象,因为它只是一个漂亮的数组 JSONobj.push({"newE

我想使用json对象创建一个邻接列表。我想用以下格式为邻接列表实现json对象

var JSONobj= {node1:[{x1,y1},{x3,y3},{x4,y4}], node2:[{x2,y2},{x3,y3}], node3:[]}
我的疑问是,我是否可以动态地向坐标列表添加值,例如
JSONobj.node3[0]={x4,y4}

或者有没有更好的方法从对象声明之外向JSONobj添加值?

您可以将元素推入JSON对象,因为它只是一个漂亮的数组

JSONobj.push({"newElement":"value"});

您可以将元素推入JSON对象,因为它只是一个漂亮的数组

JSONobj.push({"newElement":"value"});
是一个普通(结构化)Javascript对象。因此,首先它必须遵循对象语法
node1
x1
等必须是定义的变量或显式常量<代码>{x1,x2}未在JS中定义。它必须是
属性:值
,例如
{x1:1,“x2”:“a2”}
。一旦你有了一个语法上有效的对象,你就可以随心所欲地操纵它。例如

var node1 = "node1";
var x1 = "x1";
var y1 = "y1";
var x3 = "x3";
var y3 = "y3";
var JSONobj= {node1: [{x1:1,y1:1}, {x3:2,y3:3}], 
    "node2": [{"x2":1,"y2":2}], "node3": []};
JSONobj.node3[0] = {"x4":4,"y4":4};   
JSONobj.node4 = [];
JSONobj.node4.push({"x5":5, "x6":6});
如果要在JS外部使用此对象(例如,将其发送到服务器),则需要将其转换为JSON字符串:

var JSONtext = JSON.stringify(JSONobj);
如果要将JSON字符串转换为JS中的JSON对象,请使用:

var JSONobj = JSON.parse(JSONtext);
是一个普通(结构化)Javascript对象。因此,首先它必须遵循对象语法
node1
x1
等必须是定义的变量或显式常量<代码>{x1,x2}未在JS中定义。它必须是
属性:值
,例如
{x1:1,“x2”:“a2”}
。一旦你有了一个语法上有效的对象,你就可以随心所欲地操纵它。例如

var node1 = "node1";
var x1 = "x1";
var y1 = "y1";
var x3 = "x3";
var y3 = "y3";
var JSONobj= {node1: [{x1:1,y1:1}, {x3:2,y3:3}], 
    "node2": [{"x2":1,"y2":2}], "node3": []};
JSONobj.node3[0] = {"x4":4,"y4":4};   
JSONobj.node4 = [];
JSONobj.node4.push({"x5":5, "x6":6});
如果要在JS外部使用此对象(例如,将其发送到服务器),则需要将其转换为JSON字符串:

var JSONtext = JSON.stringify(JSONobj);
如果要将JSON字符串转换为JS中的JSON对象,请使用:

var JSONobj = JSON.parse(JSONtext);

我在使用JSON实现邻接列表时遇到了一些问题。首先,我不能在id:value对中使用“整数值”作为id。因此,我重新思考了我的问题,并以另一种方式进行了处理,我实现了如下的邻接列表(作为列表的列表)

当前解决方案

用笛卡尔坐标表示图的每个节点实际上是一种低级表示。在算法层面,我们需要将一个唯一的数字与每个顶点相关联;例如,您可以映射:

  • 顶点0-->(100200)
  • 顶点1-->(45,78)
  • 顶点2-->(198213)
我列出了所有顶点的列表: 例如:
节点=[[100200],[45,78],[198213]]

其中
节点[1]
给出顶点1的坐标

邻接列表是列表的一种形式

adj_list = [[1,2,3], [0, 4, 5] ]
adj_list[1]
提供与节点1相邻的节点列表。等等

这意味着:在顶点0附近(直接连接到),有顶点1、2、3

在顶点1附近,有顶点0、4、5


我发现这个解决方案更适合我的问题。感谢Dave和Jiri的回复。

我在使用JSON实现邻接列表时遇到了一些问题。首先,我不能在id:value对中使用“整数值”作为id。因此,我重新思考了我的问题,并以另一种方式进行了处理,我实现了如下的邻接列表(作为列表的列表)

当前解决方案

用笛卡尔坐标表示图的每个节点实际上是一种低级表示。在算法层面,我们需要将一个唯一的数字与每个顶点相关联;例如,您可以映射:

  • 顶点0-->(100200)
  • 顶点1-->(45,78)
  • 顶点2-->(198213)
我列出了所有顶点的列表: 例如:
节点=[[100200],[45,78],[198213]]

其中
节点[1]
给出顶点1的坐标

邻接列表是列表的一种形式

adj_list = [[1,2,3], [0, 4, 5] ]
adj_list[1]
提供与节点1相邻的节点列表。等等

这意味着:在顶点0附近(直接连接到),有顶点1、2、3

在顶点1附近,有顶点0、4、5


我发现这个解决方案更适合我的问题。感谢Dave和Jiri的回复。

另外,刚刚找到另一篇文章,刚刚找到另一篇文章,但这对我不起作用。“推送”对数组起作用,但在这里它不起作用。。!这就是如何将元素添加到JSON数组和标准数组中的方法,您可能只想这样做
JSONobj.node3.push({“newElement”:“value”})
据我所知,向JSON数组添加新对象基本上就是这样。您可以随时尝试
JSONobj.node3[0][0]='x4'
,但这样做会给您带来类似这样的效果
JSONobj->node3->0->0='x4'
很抱歉这么晚才发表评论!。正如你提到的那样,它正在发挥作用。事实上,我尝试了另一种实现邻接列表的方法,它完全按照我的意思工作。无论如何,我也从你那里得到了一些有价值的观点。但这对我不起作用。“推送”对阵列起作用,但在这里它不起作用。。!这就是如何将元素添加到JSON数组和标准数组中的方法,您可能只想这样做
JSONobj.node3.push({“newElement”:“value”})
据我所知,向JSON数组添加新对象基本上就是这样。您可以随时尝试
JSONobj.node3[0][0]='x4'
,但这样做会给您带来类似这样的效果
JSONobj->node3->0->0='x4'
很抱歉这么晚才发表评论!。正如你提到的那样,它正在发挥作用。事实上,我尝试了另一种实现邻接列表的方法,它完全按照我的意思工作。无论如何,我也从你那里得到了一些有价值的观点。谢谢Jiri。实际上,当我实现我在问题中提到的邻接列表时,存在一些问题。我正在给出我现在正在使用的新解决方案。谢谢Jiri。实际上,当我实现我在问题中提到的邻接列表时,存在一些问题。我给出了下面的新解决方案