循环使用具有特定参数的对象数组

时间:2013-06-26 19:12:51

标签: javascript jquery arrays d3.js

我需要准确地遍历我的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这就是问题。

这可能。

提前致谢

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
    }
}

http://jsfiddle.net/LyQZ6/