Javascript 多维数组关联
我有两个数组,routesFeatures和stopsFeatures,它们分别包含车辆路线的属性和每个站点的属性。它们通过名称属性相互关联,这意味着如果stopsFeatures中任何条目中的RouteName属性与RouteFeatures中任何条目中的name属性匹配,则表示停车点属于该路线。 现在,在代码方面,我正在尝试进行这种匹配,并将它们放在一个二维数组中,其中每个索引都是一个路由,在该索引中有相应的站点 这是routesFeatures:Javascript 多维数组关联,javascript,arrays,multidimensional-array,Javascript,Arrays,Multidimensional Array,我有两个数组,routesFeatures和stopsFeatures,它们分别包含车辆路线的属性和每个站点的属性。它们通过名称属性相互关联,这意味着如果stopsFeatures中任何条目中的RouteName属性与RouteFeatures中任何条目中的name属性匹配,则表示停车点属于该路线。 现在,在代码方面,我正在尝试进行这种匹配,并将它们放在一个二维数组中,其中每个索引都是一个路由,在该索引中有相应的站点 这是routesFeatures: [{ 目标1,, 姓名:“Rota 1”
[{
目标1,,
姓名:“Rota 1”
},
{
目标二,,
名称:“Rota 2”
},
...
]
这是Stops功能:
[{
目标1,,
名称:“Carga 0”,
RouteName:“Rota 2”
},
{
目标二,,
名称:“描述0”,
RouteName:“Rota 2”
},
...,
{
目标:11,
名称:“卡加5号”,
RouteName:“Rota 4”
},
...
]
这是我的职责:
function drawRoutesOptimized(routesFeatures, stopsFeatures){
var stopsRoutes = [[]];
for(var i=0; i<routesFeatures.length; i++){
// draw some stuff on screen
var count = 0;
for(var j=0; j<stopsFeatures.length; j++){
if(stopsFeatures[j].attributes.RouteName == routesFeatures[i].attributes.Name){
stopsRoutes[i][count] = stopsFeatures[j].attributes.Name;
count++;
}
}
}
}
在我看来,这应该行得通,但我得到了:
未捕获(承诺中)类型错误:无法设置未定义的属性“0”
当i变成值1时,从逻辑上讲,它是非常直接的
RouteName
站点const routes功能=[{
目标1,,
姓名:“Rota 1”
},
{
目标二,,
名称:“Rota 2”
},
];
常数停止特征=[{
目标1,,
名称:“Carga 0”,
RouteName:“Rota 2”
},
{
目标二,,
名称:“描述0”,
RouteName:“Rota 2”
},
{
目标:11,
名称:“卡加5号”,
RouteName:“Rota 4”
},
];
const result=RouteFeatures.reduce((acc,routeFeature)=>{
acc.push(停止功能减少)(_acc,停止功能)=>{
if(stopFeature.RouteName==routeFeature.Name){
_acc.push(停止功能。路线名称)
}
返回acc;
}, []))
返回acc
}, []);
控制台日志(结果)代码>从逻辑上讲,这很简单
环行路线
每条路线,循环通过站点
添加与路线匹配的RouteName
站点
这不是最优化的解决方案,但它很有效。请记住,我正在使用将每个路由初始化为数组
const routes功能=[{
目标1,,
姓名:“Rota 1”
},
{
目标二,,
名称:“Rota 2”
},
];
常数停止特征=[{
目标1,,
名称:“Carga 0”,
RouteName:“Rota 2”
},
{
目标二,,
名称:“描述0”,
RouteName:“Rota 2”
},
{
目标:11,
名称:“卡加5号”,
RouteName:“Rota 4”
},
];
const result=RouteFeatures.reduce((acc,routeFeature)=>{
acc.push(停止功能减少)(_acc,停止功能)=>{
if(stopFeature.RouteName==routeFeature.Name){
_acc.push(停止功能。路线名称)
}
返回acc;
}, []))
返回acc
}, []);
控制台日志(结果)代码>实际上并不确定您想要什么,我删除了attributes param,使其在代码段中工作。当路由无法将数据推送到数组中时,您将无法声明子数组
让routesFeatures=[{
目标1,,
姓名:“Rota 1”
},
{
目标二,,
名称:“Rota 2”
}
]
让停止功能=[{
目标1,,
名称:“Carga 0”,
RouteName:“Rota 2”
},
{
目标二,,
名称:“描述0”,
RouteName:“Rota 2”
}
]
功能绘图路线优化(路线功能、停止功能){
var stopsRoutes=[];
对于(var i=0;i来说,我不太确定您实际上想要什么,我删除了attributes param以使其在代码段中工作。您没有声明子数组,因此当路由无法将数据推送到数组中时
让routesFeatures=[{
目标1,,
姓名:“Rota 1”
},
{
目标二,,
名称:“Rota 2”
}
]
让停止功能=[{
目标1,,
名称:“Carga 0”,
RouteName:“Rota 2”
},
{
目标二,,
名称:“描述0”,
RouteName:“Rota 2”
}
]
功能绘图路线优化(路线功能、停止功能){
var stopsRoutes=[];
对于(var i=0;你能举个例子说明你希望数据是什么样子吗?最好是JSON格式。我会用一个例子更新我的问题,但这是我想要的,我的函数会得到,但它只在i为0时运行,当我递增时崩溃并给出问题中的错误。你在乎列表中是否有重复项吗?e、 g.罐装“卡加2”在列表中出现两次?重复项很好,我认为这与在写入之前需要为stopRoutes
预留空间有关。您能给出一个示例,说明您希望数据是什么样子吗?最好是JSON格式。我将用一个示例更新我的问题,但这是我想要的,并且我的函数可以得到,但它仅在当i为0时,它崩溃并在i递增时给出问题中的错误。您是否关心列表中是否有重复项?例如,can“Carga 2”在列表中出现两次?重复项很好,我认为这与在写入之前需要为stopRoutes
预留空间有关。这很好。非常感谢,我将研究reduce()在将来将这些类型的匹配转换为不同的数组,而不是我的操作方式。继续并添加了for循环。这非常有效。非常感谢,我将研究reduce()将来,我要将这些类型的匹配转换为不同的数组,而不是我的操作方式。我继续并添加了一个for循环。我知道,我最初缺少的只是stopsRoutes[I]=[];谢谢。我知道,我最初缺少的只是stopsRoutes[I]=[];谢谢。
[0]
[0] "Carga 2"
[1] "Descarga 2"
[2] "Carga 6"
[3] "Descarga 6"
[4] "Carga 7"
[5] "Descarga 7"