2015-06-15 136 views
-1

我有一個這樣的數組。基於javascript中另一個'屬性值'從數組中選擇'屬性值'

var nodes = [{ID:"101", x:100, y:200} 
     ,{ID:"102", x:200, y:200} 
     ,{ID:"103", x:300, y:300} 
     ,{ID:"104", x:200, y:300}]; 

我想有一個函數,它將節點ID作爲輸入並返回它的(x,y)。 例如,函數coordinates(103)應讀取數組(節點),並在調用它時返回x = 300,y = 300。任何指針讚賞。謝謝:) 這是我迄今爲止。它的工作原理,但我想知道更整潔和更整潔的方法。

function coordinates(id){ 
    for (var i=0 in nodes){ 
     if(nodes[i].ID == id){ 
      return { x: nodes[i].x, y: nodes[i].y}; 
     } 
    } 
} 
console.log(coordinates(102)); 
+2

好吧,讓我們一起工作吧。你試過什麼了? – AmmarCSE

回答

2

基本上你正在尋找這樣的事情

var f = function(id){ 
    var match = nodes.filter(function(d){ 
     return d.ID === id; 
    }) 
    return match && match.length && {x: match[0].x, y:match[0].y} 
    || {x: undefined, y: undefined}; 
}; 

然後f('101')輸出{x: 100, y:200}並且如果找不到匹配,那麼它將輸出{x: undefined, y: undefined}

1

使用陣列filter,嘗試:

function coordinates(id){ 
 
    return nodes.filter(function(e){ return e.ID == id })[0] 
 
} 
 

 
var nodes=[{ID:"101",x:100,y:200},{ID:"102",x:200,y:200},{ID:"103",x:300,y:300},{ID:"104",x:200,y:300}]; 
 

 
var result = coordinates("103"); 
 

 
document.write("<pre>" + JSON.stringify(result, null, 3));

2

看評論在線:

Demo

var nodes = [{ 
 
    ID: "101", 
 
    x: 100, 
 
    y: 200 
 
}, { 
 
    ID: "102", 
 
    x: 200, 
 
    y: 200 
 
}, { 
 
    ID: "103", 
 
    x: 300, 
 
    y: 300 
 
}, { 
 
    ID: "104", 
 
    x: 200, 
 
    y: 300 
 
}]; 
 

 
var noOfCord = nodes.length; 
 

 
var coordinates = function(id) { 
 
    for (var i = 0; i < noOfCord; i++) { 
 
    if (nodes[i].ID == id) { 
 
     return { 
 
     x: nodes[i].x, 
 
     y: nodes[i].y 
 
     }; 
 
    } 
 
    } 
 
} 
 

 

 
document.write(coordinates(103).x + ', ' + coordinates(103).y);

+1

我喜歡你的定製方法:) – AmmarCSE

2

您可以使用.filter,像這樣

var nodes = [{ 
 
    ID: "101", 
 
    x: 100, 
 
    y: 200 
 
}, { 
 
    ID: "102", 
 
    x: 200, 
 
    y: 200 
 
}, { 
 
    ID: "103", 
 
    x: 300, 
 
    y: 300 
 
}, { 
 
    ID: "104", 
 
    x: 200, 
 
    y: 300 
 
}]; 
 

 
function coordinates(nodes, id) { 
 
    var result = nodes.filter(function (el) { 
 
     return +el.ID === id;  
 
    }); 
 
    
 
    if (result && result.length) { 
 
    result = result[0]; 
 

 
    return { 
 
     x: result.x, 
 
     y: result.y 
 
    }; 
 
    } 
 
    
 
    return null; 
 
} 
 

 
console.log(coordinates(nodes, 103));

0

帶有具體JavaScript的輝煌解決方案已經被這裏的人們提出。所以我建議使用underscore.js,以防萬一你好奇。

function coordinates(id){ 
    var n = _.findWhere(nodes, {ID: id}); 
    return {x: n.x, y: n.y } 
} 
相關問題