我需要准确地遍历我的json数组以匹配位置和d3对象id的id。
这是一个数组的片段(生成的rails上的ruby):
{
"name": "Test",
"locations": [{
"city_id": 1,
"x": 0,
"y": 0
}, {
"city_id": 2,
"x": 0,
"y": 0
}, {
"city_id": 3,
"x": 0,
"y": 0
}, {
"city_id": 118,
"x": 0,
"y": 0
}, {
"city_id": 117,
"x": 0,
"y": 0
},
],
"city": [{
"id": 118,
"name": "London"
}, {
"id": 117,
"name": "New York"
}, {
"id": 1,
"name": "Miami"
}, {
"id": 3,
"name": "Duabi"
}, {
"id": 2,
"name": "Hong Kong"
}
]
}
收集x&的值我有一个拖累和丢弃功能。当一个物体掉落时,我发一个帖子来更新x&的位置。 y值。但是,它将更新发送到正确的id,因为我的循环不够具体。
所以现在我必须找到一种收集城市位置的方法。将它们与d3对象/城市匹配。所以我像这样循环:
.attr("transform", function(d,i) {return "translate("+json.locations[i].x+","+json.locations[i].y+")" ;})
但这只是通过数组而没有匹配任何东西。所以我想基本上我的循环经历&看ids是否相关&然后将该位置分配给相关的d3对象。因此,如果城市ID:118被拖动&删除了位置city_id:188应该更新而不是city_id:1这就是问题。
这可能。
提前致谢
答案 0 :(得分:0)
你的意思是这样的吗?
//i don't know where is it from
given_id = 118;
for(i=0;i<json.locations.length;i++) {
var id = json.locations[i].city_id;
if(id==given_id) {
var x = json.locations[i].x;
var y = json.locations[i].y;
console.log(x+","+y);
//do something with x and y
}
}